Regex在html标记中匹配

本文关键字:html Regex | 更新日期: 2023-09-27 17:58:17

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

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

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

Regex在html标记中匹配

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

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

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

这将为您提供所有时间跨度。

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

如果你不想匹配价格/销售价格,你应该使用:

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