如何在regex中对字符使用lookaround时捕获整个字符串?

2024-04-29 12:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须找出所有只由字母'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']

但我需要完整的文字。如何使用regex查找整个单词?我尝试用不同的选项修改我的正则表达式,但似乎没有任何效果。如何做到这一点?你知道吗


Tags: 实例字符串reab字母文字bablookahead
2条回答

试试看

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

ifbbbabb也是允许的。 你不需要向前看或向后看。你知道吗

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

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

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

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

Regular expression visualization

Debuggex Demo

正如您在前面的图表中看到的,这个正则表达式将匹配ba(它b可以多次出现)的任何组合,这些组合产生的单词每个a前面都有b,那么整个字符串后面可以有一个或多个b。你知道吗

相关问题 更多 >