lookbehind用于开始字符串或字符

时间:2015-06-15 08:54:44

标签: regex python-2.7 regex-lookarounds

命令

re.compile(ur"(?<=,| |^)(?:next to|near|beside|opp).+?(?=,|$)", re.IGNORECASE)

抛出一个

sre_constants.error: look-behind requires fixed-width pattern

我的程序中出现

错误,但regex101表示没问题。

我在这里尝试做的是匹配来自地址的地标(每个地址都在一个单独的字符串中),如:

  • &#34; Opp foobar,foocity&#34; - &GT;必须匹配&#34; Opp foobar&#34;
  • &#34; Fooplace,靠近酒吧,barcity&#34; - &GT;必须匹配&#34;靠近barplace&#34;
  • &#34; Fooplace,Shoppers Stop,foocity&#34; - &gt;必须匹配
  • &#34; Fooplace,opp barplace&#34; - &gt;必须匹配&#34; opp barplace&#34;

后视是为了避免将单词与opp匹配(如字符串3中所示)。

为什么会抛出这个错误?是否有替代我正在寻找的东西?

2 个答案:

答案 0 :(得分:4)

re.compile(ur"(?:^|(?<=[, ]))(?:next to|near|beside|opp).+?(?=,|$)", re.IGNORECASE)

您可以使用3[]加入|条件。请参阅演示。

https://regex101.com/r/vA8cB3/2#python

答案 1 :(得分:0)

re.findall与下面的正则表达式一起使用,因为如果有任何捕获组出现,re.findall必须返回捕获组中的内容。

re.compile(ur"(?m)(?:[, ]|^)((?:next to|near|beside|opp).+?)(?:,|$)", re.IGNORECASE)