【问题标题】:.NET regular expression.NET 正则表达式
【发布时间】:2012-11-15 21:29:20
【问题描述】:

我有带有像

这样的 img 标签的 html 页面源代码
<p>xyz </p>< img ....... 1 . gif >........<p>xyz</p>
           < img ........ 2 . jpg >..............<p>xyz</p>    
           < img ........ 3 . jpg ><p>xyz</p>
           < img ....... 4 . gif >......<span>xyz</span>

Img 标签可以包含 jpg 和其他格式的图像,并且可以在网页源中以任何顺序排列。现在我想使用 .NET 正则表达式,它可以给我第一个带有 JPG 图像的 img 标签,例如

< img ... 2. jpg >

或任何第一个没有 gif 图像的 img 标签。基本上我想在我的正则表达式中删除笑脸 gif 图像

请给我推荐正则表达式

【问题讨论】:

    标签: .net regex


    【解决方案1】:

    不要使用 RegEx 解析 HTML。出于令人信服的原因,请参阅 here

    HTML 不是正则语言,因此不适合使用正则表达式进行解析。

    使用 HTML Agility Pack 解析 HTML。它以类似于XmlDocument 的方式公开解析后的 H​​TML,并且可以使用 XPath 进行查询。

    【讨论】:

    • 这不是解析。这是在根本不同的文本中搜索。
    • 嗨 Oded 感谢您的回复,但是我已经有了带有输入字符串(源代码)的 .net,并且我正在使用类似字符串模式 = @""; System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(输入, 模式, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline);
    • @Stilgar - 这是 HTML,可能非常多变。 HTML 敏捷包将能够比任何正则表达式更好地处理这个问题。
    • 同意,但是是否可以使用正则表达式获取第一个 jpg img 标签?谢谢拉杰
    • @Raj - 可能并不意味着推荐。仅使用记事本和命令行编译器就可以编写一个非常复杂的 GUI 应用程序。不过我不会推荐它。
    【解决方案2】:
    <.*img[^>]*\.[^>]*jpg[^>]*>
    

    【讨论】:

    • 它给了我错误的结果 img 标签以 gif image.like ........

      xyz

    • 谢谢,它的工作,你能告诉我为什么上面的表达式不包括第一个
    • [^>] 代表任何不同于“>”的字符,而我给你的错误表达是“。”代表任何字符。所以,错误的匹配整个第一个 img 标签和第二个:它“不能在关闭标签上停止”。
    • 我犯了同样的错误 :( ,任何方式再次感谢
    【解决方案3】:

    不赞成使用正则表达式来解析或修改 HTML 文档。对于一次性操作,您可以使用

    <img\s+[^>]*2.jpg[^>]*>(</img>)?
    

    识别包含“2.jpg”的图像标签。如果您想多次执行此操作,则可以使用 HTML 解析器(如 HTML Agility Pack)帮自己一个忙。面对现实世界的 HTML 代码时,脆弱性要小得多。

    【讨论】:

    • 我不能使用像 2 这样的硬编码图像名称,如果我不使用,那么它还包括 gif 笑脸
    • @Raj:您如何准确识别您需要查找的图像标签?是digit.jpg还是anything.gif?
    【解决方案4】:

    如果 html 是有效的 xhtml,你也可以使用 xpath 或 xslt。

    xpath 应该是这样的(抱歉没有测试):

    //img[not fn:ends-with(@src, ".gif")]
    

    【讨论】:

      【解决方案5】:

      jquery 怎么样?

      很容易找到 html dom 部分并更改它们 $('img[src~=.gif]').hide();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2021-06-08
        相关资源
        最近更新 更多