【发布时间】:2014-11-20 18:28:18
【问题描述】:
这个想法是匹配 h3> 之后和 </section 之前的所有代码块,其中匹配实际上是多个 <p>...</p> 元素
这实际上是在 sublime text 3 中(在文件中查找所有内容),目的是将所有这些块包装在 <div><\div> 标签中(感谢 emmet 插件,ctrl+shift+g)...
...所以,如果您知道它应该有效,请告诉我,我将不再担心它。或者,如果您能想出另一种方法来归档相同的目标,那也太棒了。
我的想法是:
(?<=<\/h3\s*)<p(?:\n|.)*(?!\s*<\/section)
分解后会变成……
(?<=<\/h3\s*) # lookbehind for </h3 and any space including newline
<p(?:\n|.)* # match, if it follows, <p and anything...
(?!\s*<\/section) # if not followed by spaces and <\section
我收到Invalid lookbehind asserion...,它似乎是第一个星号。
这在 python 3 中是否正确?
已编辑:\s 包括 \n,已更改。另外,如果有类似问题,请参阅有关 PCRE 的评论
【问题讨论】:
-
Sublime Text 实际上使用的是 PCRE 正则表达式引擎,而不是 Python 的
-
在 Perl 中,您通常可以使用
\K来解决缺少可变长度后视的问题。m{</h3\s*\K<p.*(?!\s*</section)}s(请注意,\s在 Perl 中包括\n,可能在其他任何地方也一样。) -
啊!谢谢。我会考虑在 PCRE 中编写它
-
.*(?!\s*</section)肯定不会做正确的事。我想你在找(?:(?!\s*</section).)* -
@ikegami 我注意到 \s,谢谢,不知道为什么我认为 sublime 需要两者,它不需要
标签: regex sublimetext sublimetext3 pcre