【发布时间】:2018-06-22 00:16:46
【问题描述】:
我正在尝试创建一个正则表达式来匹配 HTML 文档中的内容,但我希望排除包含在标签本身中的匹配项。考虑以下几点:
<p>Here is some sample text for my widgets</p>
<a href="http://mywidgets.nowhere">Click here to view my widgets</a>
我想匹配“widgets”,这样我就可以用不同的字符串替换它,比如“green box”,而不用替换 url 中的匹配项。
匹配 'widgets' 很简单,但是当它出现在开始和结束标记 '' 中时,我正在努力添加排除以检查'widgets'。
我目前的工作: 作为第一步,我已经开始匹配“”中包含的“小部件”。 (然后我可以继续将其设置为排除)但是下面的字符串似乎与整个文档匹配,即使我在结束时放置了排除 > 以确保小部件出现在标签内。
<.*[^>]widgets.*[^<]>+
这可能归结为懒惰/贪婪,但我无法完全解决!
【问题讨论】:
-
H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ - 使用解析器。还有什么语言?因为在 .net 中很容易做到这一点,因为它允许可变宽度的lookbehinds:
(?<!<[^>]*)widgets) -
@ctwheels 我正在使用 c# .net 并且该正则表达式也可以工作,干杯!
-
那真是太幸运了哈哈,我会作为答案发布。那完全是在黑暗中拍摄的。
-
@ctwheels 哇,我不知道有一种语言允许它们。我阅读问题的第一个想法实际上是“好吧,显然不要向后看,因为我们不知道长度”:)
标签: c# regex html-parsing