【问题标题】:Matching a regex in html, ignoring spaces, and quotation marks匹配 html 中的正则表达式,忽略空格和引号
【发布时间】:2009-03-04 01:23:48
【问题描述】:

我需要从一组 HTML 文件中找到某个块并将其全部删除。这些文件实际上是被 HTML 破解的,所以我不想像以前那样用 HtmlAgility 包解析它,而是想使用一个简单的正则表达式。

html 部分将始终如下所示:

<CENTER>some constant text <img src=image.jpg> more constant text: 
 variable section of text</CENTER>

以上都可以是大小写任意组合,注意是img src=image.jpg而不是img src="image.jpg"...而且可以有任意数量的空格常量字符之间的字符。

这里有一些例子:

    <CENTER>This page has been visited 
<IMG SRC=http://place.com/image.gif ALT="alt text">times since 10th July 2007
</CENTER>

    <center>This page has been visited 
<IMG src="http://place.com/image.gif" Alt="Alt Text"> 
times since 1st October 2005</center> 

你认为匹配这种模式的好方法是什么?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    需要多少文本才能唯一标识目标?我会先试试这个:

    @"(?is)<center>\s*This\s+page\s+has\s+been\s+visited.*?</center>"
    

    【讨论】:

    • 忽略大小写 (i) 和单行 (s)——例如不用担心大小写和换行符。
    • 我刚刚意识到当你像我一样使用冒号时不需要冒号,所以我删除了它。这是一个完整的解释:regular-expressions.info/modifiers.html
    • 你 100% 确定这个正则表达式会起作用吗?它没有找到任何匹配项,或者我搞砸了:)
    • 哦,我没有看到上面的评论:)
    【解决方案2】:

    这真的取决于您可以使正则表达式和匹配所需元素的简单程度。

    <center>[^<]+<img[^>]+>[^>]+</center>
    

    也使用不区分大小写的标志(我不知道 C# 使用什么)。如果您需要更高级的东西,因为您会遇到 img 标签位于中心标签内并且不匹配的情况,那么您可以像其他答案一样开始硬编码短语。

    【讨论】:

      【解决方案3】:

      在 C# 中,您可以简单地使用它,假设 originalHTML 包含您的整个 HTML 文件。

      string result = null;
      result = Regex.Replace(originalHtml,
                             @"(\s*<center>[^<]*<img src=[^""].*?>.*?</center>\s*)", 
                             "", 
                             RegexOptions.Singleline | RegexOptions.IgnoreCase);
      

      Regex 将删除原始 HTML 中任何出现的模式并返回修改后的版本。

      【讨论】:

        猜你喜欢
        • 2018-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        相关资源
        最近更新 更多