如何在使用' lookaround'时捕获整个字符串。正则表达式中的字符?

时间:2015-10-03 19:25:31

标签: 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'((?<=b)a(?=b))',mystring)

但这只会让我回复所有&#39; a&#39;其后是/之后是&#39; b&#39;像:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

Regular expression visualization

Debuggex Demo

正如您在上图中所看到的,此正则表达式将匹配ba的任意组合(b可以多次出现),这会产生每a前面的单词{ {1}}然后整个字符串后跟一个或多个b

答案 1 :(得分:0)

尝试

bbbabb

如果还允许babab。 你不需要向前看或向后看。

编辑: 是的,要同时匹配ba的共享re.findall(r'(b+a)+b+',mystring); )等,它应该是

<div class="hexagon"></div>

.hexagon {
  position: relative;
  width: 300px; 
  height: 173.21px;
  background-color: #64C7CC;
  margin: 86.60px 0;
  border-left: solid 5px #333333;
  border-right: solid 5px #333333;
}

.hexagon:before,
.hexagon:after {
  content: "";
  position: absolute;
  z-index: 1;
  width: 212.13px;
  height: 212.13px;
  -webkit-transform: scaleY(0.5774) rotate(-45deg);
  -ms-transform: scaleY(0.5774) rotate(-45deg);
  transform: scaleY(0.5774) rotate(-45deg);
  background-color: inherit;
  left: 38.9340px;
}

.hexagon:before {
  top: -106.0660px;
  border-top: solid 7.0711px #333333;
  border-right: solid 7.0711px #333333;
}

.hexagon:after {
  bottom: -106.0660px;
  border-bottom: solid 7.0711px #333333;
  border-left: solid 7.0711px #333333;
}