繁体   English   中英

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

[英]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'

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

['bab' 'babab' 'babbab']  

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

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

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

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

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

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

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

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

正则表达式可视化

Debuggex演示

正如可以从上面的图表看到此正则表达式匹配的任何组合ba (其b罐呈现多于一个的时间)时,其产生的话,每a由上一页b那么整个字符串的可接着是一个或多个b

尝试

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

如果也允许bbbabb 你不需要前瞻或后退。

编辑:是的,以匹配babab (两者a共享b )等应该是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM