Python 如何在使用';环顾四周';在正则表达式中使用chars?

Python 如何在使用';环顾四周';在正则表达式中使用chars?,python,regex,state-machine,regex-lookarounds,regex-group,Python,Regex,State Machine,Regex Lookarounds,Regex Group,我必须找到所有只由字母“a”和“b”组成的字符串,每个“a”的实例后面紧跟着“b”,前面紧跟着“b” 例如: mystring = 'bab babab babbab ab baba aba xyz' 那么我的正则表达式应该返回: ['bab' 'babab' 'babbab'] (在字符串'ab'-'a'前面没有'b'。类似地,对于'aba'和'xyz'来说,也不仅仅由'a','b'组成。) 我使用了lookahead并编写了以下正则表达式: re.findall(r'((?<=

我必须找到所有只由字母“a”和“b”组成的字符串,每个“a”的实例后面紧跟着“b”,前面紧跟着“b”

例如:

mystring = 'bab babab babbab ab baba aba xyz'
那么我的正则表达式应该返回:

['bab' 'babab' 'babbab']  
(在字符串'ab'-'a'前面没有'b'。类似地,对于'aba'和'xyz'来说,也不仅仅由'a','b'组成。)

我使用了lookahead并编写了以下正则表达式:

re.findall(r'((?<=b)a(?=b))',mystring)
但我需要完整的文字。如何使用正则表达式查找整个单词?我试图用各种选项修改我的正则表达式,但似乎没有任何效果。如何做到这一点?

试试看

re.findall(r'(b+ab+)+',mystring);
如果
bbbabb
,则也允许。 你不需要向前看或向后看

编辑: 是的,为了同时匹配
babab
(两个
a
的共享
b
)等,应该

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

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

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


如上图所示,此正则表达式将匹配
ba
(其
b
可以呈现多次)的任何组合,这些组合生成的单词在每个
a
前面加上
b
,然后整个字符串后面可以加上一个或多个
b

谢谢。但是,如果字符串包含多个“a”的实例,比如“babab”、“babbab”、“babab”,那么它就不起作用了。非常感谢,它起作用了。我想我必须提高我对有限状态机的理解
>>> re.findall(r'\b(?:b+a)+b+\b',mystring)
['bab', 'babab', 'babbab']