如何在正则表达式中使用带有字符的"环视"来捕获整个字符串?

Kar*_*ngo 5 python regex state-machine regex-group regex-lookarounds

我必须找到仅由字母'a'和'b'组成的所有字符串,并且'a'的每个实例后面紧跟'b'并且紧跟在'b'之后.

例如:

mystring = 'bab babab babbab ab baba aba xyz'
Run Code Online (Sandbox Code Playgroud)

然后我的正则表达式应该返回:

['bab' 'babab' 'babbab']  
Run Code Online (Sandbox Code Playgroud)

(在字符串'ab'中 - 'a'前面没有'b'.类似地'aba'和'xyz'不仅仅是'a','b'.)

我使用了lookahead为此写了这个正则表达式:

re.findall(r'((?<=b)a(?=b))',mystring)
Run Code Online (Sandbox Code Playgroud)

但这只会让我回复所有'a'的实例,这些实例后跟/前面跟'b',如:

['a','a','a','a']
Run Code Online (Sandbox Code Playgroud)

但我需要完整的话.如何使用正则表达式找到整个单词?我尝试用各种选项修改我的正则表达式,但似乎没有任何效果.如何才能做到这一点?

Kas*_*mvd 3

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

>>> re.findall(r'\b(?:b+a)+b+\b',mystring)
['bab', 'babab', 'babbab']
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

调试演示

正如您从上图中看到的,该正则表达式将匹配 的任何组合bab可以出现多次),这会生成每个a单词前面的单词b,然后整个字符串后面可以跟一个或多个b