CT *_*Zhu 7 python regex python-2.7
正如文件所述:
这被称为负面的后观断言.与正向lookbehind断言类似,包含的模式必须仅匹配某些固定长度的字符串.
所以这将起作用,意图是匹配任何,外部{},但不是内部{}:
In [188]:
re.compile("(?<!\{)\,.").findall('a1,a2,a3,a4,{,a6}')
Out[188]:
[',a', ',a', ',a', ',{']
Run Code Online (Sandbox Code Playgroud)
这将是一个稍微不同的查询:
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]:
Run Code Online (Sandbox Code Playgroud)
但是,如果查询是'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']
Run Code Online (Sandbox Code Playgroud)
实现这个的任何替代方案?消极的看法是错误的做法吗?
任何原因这都是为什么lookbehind被设计为首先(只匹配一些固定长度的字符串)?
实现这个的任何替代方案?
是.有一种非常简单的技术,这种情况非常类似于"正则表达式匹配模式,除非......"
这是你的简单正则表达式:
{[^}]*}|(,)
Run Code Online (Sandbox Code Playgroud)
交替的左侧 |匹配完整{ brackets }标签.我们将忽略这些匹配.右侧匹配并捕获第1组的逗号,我们知道它们是正确的逗号,因为它们与左侧的表达式不匹配.
这是一个执行多个任务的演示,因此您可以选择(参见演示底部的输出):
SplitHere所以我们可以执行任务4 ...参考
如何匹配(或替换)模式除了情况s1,s2,s3 ......