C# 正则表达式排除HTML标记中包含的匹配项

C# 正则表达式排除HTML标记中包含的匹配项,c#,regex,html-parsing,C#,Regex,Html Parsing,我试图创建一个正则表达式来匹配HTML文档中的内容,但我希望排除标记本身中包含的匹配。考虑以下事项: <p>Here is some sample text for my widgets</p> <a href="http://mywidgets.nowhere">Click here to view my widgets</a> 以下是我的小部件的一些示例文本 我想匹配“widgets”,这样我就可以用一个不同的字符串替换它,比如说“gree

我试图创建一个正则表达式来匹配HTML文档中的内容,但我希望排除标记本身中包含的匹配。考虑以下事项:

<p>Here is some sample text for my widgets</p>
<a href="http://mywidgets.nowhere">Click here to view my widgets</a>
以下是我的小部件的一些示例文本

我想匹配“widgets”,这样我就可以用一个不同的字符串替换它,比如说“greenbox”,而不用替换url中的匹配项

匹配“widgets”很容易,但我正在努力添加排除项,以便在“widgets”出现在开始和结束标记“”中时检查它

我当前的工作方式:作为第一步,我已开始匹配“”中包含的“小部件”。(稍后我可以继续将其作为排除项)但是,下面的字符串似乎与整个文档相匹配,尽管我在closing>上放置了一个排除项,以确保小部件显示在标记中

<.*[^>]widgets.*[^<]>+ 
]小部件。*[^+

这可能是因为懒惰/贪婪,但我不能完全解决它!

这可能部分起作用:

(?:^|>)[^<]*widgets

(?:^ |>)[^这可能部分起作用:

(?:^|>)[^<]*widgets
(?:^ |>)[^概述
这不是一个很好的答案,因为它使用正则表达式解析HTML,但它确实适用于OP给出的测试用例

有关更多信息,请参阅


代码

(?]*)小部件

解释
  • (?]*)
    反向查找,确保前面不是
    以外的任何字符(任意次数)
  • widgets
    按字面意思匹配
概述 这不是一个很好的答案,因为它使用正则表达式解析HTML,但它确实适用于OP给出的测试用例

有关更多信息,请参阅


代码

(?]*)小部件

解释
  • (?]*)
    反向查找,确保前面不是
    以外的任何字符(任意次数)
  • widgets
    按字面意思匹配

-使用解析器。还有什么语言?因为在.net中很容易做到这一点,因为它允许可变宽度的lookbehinds:)@ctwheels我使用的是c#.net,正则表达式也可以,干杯!那真是太幸运了,哈哈,我会发帖回答的。这完全是瞎猜。@ctwheels哇,我不知道有一种语言允许他们这么做。阅读这个问题时,我的第一个想法实际上是“好吧,显然不要回头看,因为我们不知道长度”:——使用解析器。还有什么语言?因为在.net中很容易做到这一点,因为它允许可变宽度的lookbehinds:)@ctwheels我使用的是c#.net,正则表达式也可以,干杯!那真是太幸运了,哈哈,我会发帖回答的。这完全是瞎猜。@ctwheels哇,我不知道有一种语言允许他们这么做。阅读这个问题时,我的第一个想法实际上是“好吧,显然不要回头看,因为我们不知道长度”: