【问题标题】:Regex match within html tagshtml标签内的正则表达式匹配
【发布时间】:2016-07-21 18:55:51
【问题描述】:

我有以下两种类型的输出,我需要进行正则表达式匹配和替换:

<span class=Price>$9.99</span>
<span class=RegularPrice>$9.99</span><span class=SalePrice>$4.99</span>

我要做的是在第一个示例中匹配 $9.99;第二次为 4.99 美元。 (如果类是 Price 或 SalePrice 则基本上匹配标签的内容

我尝试了几个例子;但它们要么匹配整个跨度;或从 SalePrice 开始并继续前进

我现在得到的是:

var regex = new Regex(@"<span class=Price|SalePrice>(.*?)<\/span>");

但它在某个地方有点偏离。我认为这种交替不太正确。有人能指出我正确的方向吗?

【问题讨论】:

  • 在正则表达式上下文中使用管道(不在组内(...))会将所有内容从左到右分开。这意味着您实际上想要(?:Price|SalePrice)

标签: c# regex


【解决方案1】:

幸运的是,.NET 支持可变长度的lookbehinds:

(?<=<span\s+class=\1?(?:Price|SalePrice)(['"])?>)([^<]*)(?=<\/span>)

我在类名周围添加了匹配模式的单/双引号,因为作为有效的 HTML,它们应该有它。

【讨论】:

    【解决方案2】:

    这会一直给你跨度。

    "<span class=(Price|SalePrice)>(.*?)<\/span>"
    

    【讨论】:

      【解决方案3】:

      如果您不想匹配 Price/SalePrice,您应该使用:

      <span class=(?:Price|SalePrice)?>(.*?)<\/span>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        相关资源
        最近更新 更多