html标记内的正则表达式匹配

时间:2016-07-21 18:55:51

标签: c# regex

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

<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>");

但它在某个地方有点偏离。我认为这种变化是不对的;有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

这将一直给你跨越。

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

答案 2 :(得分:0)

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

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