如何在正则表达式中使用 'lookaround' 和字符时捕获整个字符串?

How to capture the entire string while using 'lookaround' with chars in regex?

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

例如:

mystring = 'bab babab babbab ab baba aba xyz'

那么我的正则表达式应该 return:

['bab' 'babab' 'babbab']  

(在字符串 'ab' - 'a' 前面没有 'b'。类似地,对于 'aba' 和 'xyz' 也不仅仅由 'a','b'.)

我为此使用了前瞻并编写了这个正则表达式:

re.findall(r'((?<=b)a(?=b))',mystring)

但这只是 return 我所有 'a' 的实例,它们是 'b' 的 followed/preceded,例如:

['a','a','a','a']

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

尝试

re.findall(r'(b+ab+)+',mystring);

if bbbabb 也是允许的。 你不需要向前看或向后看。

编辑: 是的,要匹配 babab(两个 a 的共享 b)等。它应该是

re.findall(r'(b+a)+b+',mystring);

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

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

Debuggex Demo

正如您从上图中看到的那样,此正则表达式将匹配 ba 的任意组合(b 可以出现多次),这会产生每个 a 之前的单词通过 b 那么整个字符串后面可以跟一个或多个 b