2011-01-15 6 views
1

мне нужно регулярное выражения строки, чтобы получить все якоря теги на странице с определенным именем класса CSS, в C#/vb.netрегулярные выражения для имени класса

это то, что я получил до сих пор

"<a.*?href=""(.*?)"".*?>(.*?)</a>" 

но мои попытки добавить «class = name» не работают, также можно найти ссылки, в которых имя класса отображается до или после href с одним выражением?

Я знаком с сторонними html-библиотеками, но это лишний раз для того, что я имею в виду, так же как и управление веб-браузером.

+1

Я чувствую себя обязанным включить [это] (http://stackoverflow.com/questions/1732348/regex- match-open-tags-except-xhtml-self-contains-tags/1732454 # 1732454) ответ. Хотя ваша цель более конкретна, вы, вероятно, получите более точные результаты с помощью правильного анализатора html. – R0MANARMY

ответ

0

Я бы сделать это в два этапа:

  1. найти все теги привязки с регулярным выражением
  2. фильтр из всех тех, которые имеют название неправильный класс.
0

лучше не пытаться разобрать HTML с регулярными выражениями, но использовать библиотеку XML и использовать выражение XPath

+1

За исключением того, что html не всегда правильный xml – R0MANARMY

0
<a href="(.*?)" class="(.*?)">(.*?)</a> 

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

Редактировать: Перечитайте вопрос ... Если вы после определенного имени класса, замените второй (*.?) На то, что вы хотите. Например. если вы после этого класса темп, сделайте следующее:

<a href="(.*?)" class="temp">(.*?)</a> 

Затем возьмите первую группу по ссылке, или второй группы для текста ссылки.

Если вы используете его на C#, вам нужно будет избежать кавычек. Следующее должно работать на C#.

string regex = @"<a href=""(.*?)"" class=""temp"">(.*?)</a>"; 
0

Попробуйте это:

(?<1><a *?)(?<2>[^>]*?class=")(?<3>test)(?<4>"[^>]*?>) 

И сделать Заменить

$1$2MyClass$4 

работ для вещи, как;

<a class="test" href="http://www.google.com">Test</a> 

Edit: извлечение URL

Если вы хотите, чтобы извлечь URL для определенного класса, который вы должны будете использовать 2 выражения:

(?<1><a *?)(?<2>[^>]*?class="test"[^>]*? href=")(?<3>[^"]*?)(?<4>"[^>]*?>) 

(?<1><a *?)(?<2>[^>]*?href=")(?<3>[^"]*?)(?<4>"[^>]*?class="test"[^>]*?>) 

URL-адрес находится в группе .

Первый из них будет соответствовать:

<a class="test" href="http://www.google.com">Test</a> 

Второй будет соответствовать

<a href="http://www.google.com" class="test">Test</a> 
+0

Заменит класс 'test' для 'MyClass' –

+0

, можете ли вы сделать это на этом? Test Мне нужно только извлечь url – ambiguousPanda

+0

Вам нужно извлечь URL-адрес для определенного класса? –

Смежные вопросы