2016-07-21 3 views
2

Я получил следующие два типа выхода мне нужно сделать матч регулярок & заменить на:Regex матч в HTML-теги

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

Что я ищу сделать, это соответствует $ 9,99 в первом примере ; и $ 4,99 во 2-м. (В основном соответствует содержанию тега, если класс либо цена или SalePrice

Я попробовал несколько примеров, но они либо совпадают весь срок, или начать с SalePrice и идти вперед

Что я» ве получил сейчас:

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

но это прочь немного где-то я думаю, что чередование не совсем верно, кто-то может мне точку в правильном направлении

+0

Использование трубы в контексте регулярного выражения (не входя в группу '(...)') будет отделять все слева от нее справа. Это означает, что вы действительно хотите '(?: Price | SalePrice)' – revo

ответ

1

посчастливится, .NET поддерживает переменной длины: Утверждения назад

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

Я добавил сингл/double кавычки, сопоставляющие шаблон вокруг имен классов, поскольку в качестве допустимого HTML они должны иметь его.

0

это даст вам охватывает все.? время.

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

Если вы не хотите, чтобы соответствовать Цена/SalePrice вы должны использовать:

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