Python 如何在使用';环顾四周';在正则表达式中使用chars?
我必须找到所有只由字母“a”和“b”组成的字符串,每个“a”的实例后面紧跟着“b”,前面紧跟着“b” 例如: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'((?<=
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']