如何在正则表达式中使用 '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']
正如您从上图中看到的那样,此正则表达式将匹配 ba
的任意组合(b
可以出现多次),这会产生每个 a
之前的单词通过 b
那么整个字符串后面可以跟一个或多个 b
。
我必须找到所有仅由字母 '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']
正如您从上图中看到的那样,此正则表达式将匹配 ba
的任意组合(b
可以出现多次),这会产生每个 a
之前的单词通过 b
那么整个字符串后面可以跟一个或多个 b
。