【发布时间】:2014-07-28 09:52:05
【问题描述】:
正如document 所说:
这称为否定后向断言。与肯定的后向断言类似,包含的模式必须只匹配一些固定长度的字符串。
所以这会起作用,目的是匹配{}之外的任何,,但不在{}内部:
In [188]:
re.compile("(?<!\{)\,.").findall('a1,a2,a3,a4,{,a6}')
Out[188]:
[',a', ',a', ',a', ',{']
这将适用于稍微不同的查询:
In [189]:
re.compile("(?<!\{a5)\,.").findall('a1,a2,a3,a4,{a5,a6}')
#or this: re.compile("(?<!\{..)\,.").findall('a1,a2,a3,a4,{a5,a6}')
Out[189]:
[',a', ',a', ',a', ',{']
In [190]:
但如果查询是'a1,a2,a3,a4,{_some_length_not_known_in_advance,a6}',根据文档,以下内容将无法按预期工作:
In [190]:
re.compile("(?<![\{.*])\,.").findall('a1,a2,a3,a4,{a5,a6}')
Out[190]:
[',a', ',a', ',a', ',{', ',a']
有什么办法可以做到这一点吗?消极的回顾是错误的方法吗?
这就是lookbehind最初的设计目的(仅匹配某个固定长度的字符串)的任何原因?
【问题讨论】:
标签: python regex python-2.7