gpt4 book ai didi

regex - 查找至少包含一组的所有子串

转载 作者:行者123 更新时间:2023-12-04 06:11:56 27 4
gpt4 key购买 nike

我试图在一个字符串中找到所有满足条件的子串。

假设我们有字符串:

s = 'some text 1a 2a 3 xx sometext 1b yyy some text 2b.'

我需要应用搜索模式{(一个(词组),二(另一组词),三(另一组词)),词}。前三个位置是可选的,但至少应该有一个。如果是这样,我需要在他们之后说几句话。输出应该是:

2a  1a  3 xx
1b yyy
2b

我写了这个表达式:

find_it = re.compile(r"((?P<one>\b1a\s|\b1b\s)|" +
r"(?P<two>\b2a\s|\b2b\s)|" +
r"(?P<three>\b3\s|\b3b\s))+" +
r"(?P<word>\w+)?")

每组包含一组或不同的单词(不是 1a、1b)。而且我不能将它们混为一团。如果组为空,它应该是 None。显然结果是错误的。

find_it.findall(s)
> 2a 1a 2a 3 xx
> 1b 1b yyy

非常感谢您的帮助!

最佳答案

您可以使用以下正则表达式:

>>> reg=re.compile('((?:(?:[12][ab]|3b?)\s?)+(?:\w+|\.))')
>>> reg.findall(s)
['1a 2a 3 xx', '1b yyy', '2b.']

在这里,我只是使用字符类和修饰符 ? 来简化您的正则表达式。以下正则表达式包含 2 部分:

[12][ab]|3b?

[12][ab] 将匹配 1a1b2a2b3b? 将匹配 3b3

如果您不想要 2b 末尾的点,您可以使用以下正则表达式 positive look ahead这比前面的正则表达式更通用(因为使 \s 可选在第一组中不是一个好主意):

>>> reg=re.compile('((?:(?:[12][ab]|3b?)\s)+\w+|(?:(?:[12][ab]|3b?))+(?=\.|$))')
>>> reg.findall(s)
['1a 2a 3 xx', '1b yyy', '2b']

此外,如果您的数字和示例子字符串只是实例,您可以使用 [0-9][a-z] 作为通用正则表达式:

>>> reg=re.compile('((?:[0-9][a-z]?\s)+\w+|(?:[0-9][a-z]?)+(?=\.|$))')
>>> reg.findall(s)
['1a 2a 3 xx', '1b yyy', '5h 9 7y examole', '2b']

关于regex - 查找至少包含一组的所有子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31524796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com