【问题标题】:c# Regex to modify all matching hrefsc#正则表达式修改所有匹配的href
【发布时间】:2011-12-22 05:52:36
【问题描述】:

如何替换

<a href="page">Text</a>

<a href="page.html">Text</a>

其中pageText 可以是任意字符集?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    这会奏效。请注意,我只捕获 href 内的任何内容。

    resultString = Regex.Replace(subjectString, @"(?<=<a[^>]*?\bhref\s*=\s*(['""]))(.*)(?=\1.*?>)", "$2.html");
    

    并将 .html 附加到它。您可能希望根据需要进行更改。

    编辑:在火焰战争开始之前。是的,它适用于您的具体示例,而不适用于互联网上所有可能的 html。

    【讨论】:

      【解决方案2】:

      您不应该使用正则表达式解析 HTML。详情见 this question 的回复。

      UPD:正如 TrueWill 所指出的,您可能希望使用 Html Agility Pack 进行替换。但是在某些特殊情况下,FailedDev 提出的正则表达式可以,虽然我会稍微修改它看起来像这样:@"(?&lt;=&lt;a\b[^&gt;]*?\bhref\s*=\s*(['""]))(.*)(?=\1.*?&gt;)"(在&lt;a 之后放置一个\b,以排除其他以“a”开头的标签)。

      【讨论】:

      • 我不是在尝试解析 HTML,而是在尝试在 html 文件中进行字符串替换。
      • 一个简单的正则表达式是&lt;a.*?href="(.*)".*?&gt;(.*?)&lt;/a&gt; 来查找零件。
      • @Justin808 但要正确执行,您实际上需要解析文档。例如,您可能希望忽略脚本和 cmets。
      • @Gebb 是正确的。对 HTML 的任何更改,尤其是那些仅影响特定上下文(例如在 HREF 中)的更改,都涉及解析。看看htmlagilitypack.codeplex.com
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多