【发布时间】:2015-06-15 08:54:44
【问题描述】:
命令
re.compile(ur"(?<=,| |^)(?:next to|near|beside|opp).+?(?=,|$)", re.IGNORECASE)
抛出一个
sre_constants.error: look-behind requires fixed-width pattern
我的程序出错,但regex101 显示它没问题。
我在这里要做的是匹配地址中的地标(每个地址都在一个单独的字符串中),例如:
- "Opp foobar, foocity" --> 必须匹配 "Opp foobar"
- “Fooplace, near barplace, barcity” --> 必须匹配“near barplace”
- “Fooplace, Shoppers Stop, foocity”--> 不能匹配任何内容
- “Fooplace, opp barplace”--> 必须匹配“opp barplace”
后视是避免匹配带有opp的单词(如字符串3)。
为什么会抛出这个错误?有没有替代我正在寻找的东西?
【问题讨论】:
-
为什么:
<space>和,是 1 宽度,^是 0 宽度,Python 无法处理不匹配。 -
regex101.com/r/lX0mL2/1 - “在字符串的开头,或者前面有空格或逗号”
(?<=,| |^)可以重写为“前面没有不是空格或逗号的东西”(?<![^ ,])(总是 1-width 的断言,但由于它是 negative 它也将匹配字符串的开头)。
标签: regex python-2.7 regex-lookarounds