2012-06-20 4 views
0

У меня есть этот текст:достичь определенного шаблона регулярного выражения

<a href="/extend/themes/bizway">BizWay</a> 

И я хочу использовать регулярные выражения, чтобы получить слово BizWay только извлеченное из внутреннего текста тега. И, кстати, что это образец тега, BizWay может быть любое слово

Так что давайте говорить, что я хочу, как Regex:

<a href=" + '"' + "/extend/themes/WORD" + '"' + ">WORD</a> 

Где WORD = СЛОВО

EDIT:

Я попытался следующий Regex Pattern:

@"<a href=" + '"' + "/extend/themes/.*" + '"' + @">.*</a>" 

Но г ives меня целая линия.

Я действительно ценю вашу помощь.

ответ

2

Я полностью согласен с loeschg. Я допустил ошибку, игнорируя этот совет и использовал регулярные выражения. Примерно через месяц после настройки моего кода я закончил использование HtmlAgilityPack. Parsing Html с использованием регулярного выражения просто не так прямолинейен, как вы ожидали, слишком много переменных.

Вот отправная точка для вас ...

string rawHtml = "<a href=\"/extend/themes/bizway\">BizWay</a>" 

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(rawHtml); 
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a/@href"); 
foreach (var node in linkNodes) 
{ 
    string word = node.InnerText; 
} 

Чтобы проверить значение HREF вы можете сделать это ...

if (node.Attributes["href"].Value.Contains("extend/themes")) 
+0

Спасибо, что это сработало как шарм :) –

+0

Ха-ха, спасибо за доброе согласие! :) – loeschg

4

Я бы предложил использовать библиотеку HTML-анализатора для C# вместо использования regex (здесь есть длинный аргумент из stackoverflow RegEx match open tags except XHTML self-contained tags).

Из-за быстрого поиска HTMLAgilityPack кажется хорошей ставкой для C#. Это сообщение stackoverflow поможет вам настроить этот проект в вашем проекте C#. How to use HTML Agility pack

0

Я подозреваю, что проблема заключается не в самом регулярном выражении, а скорее в ожидании того, что он будет делать. По моему опыту регулярные выражения возвращают текст, соответствующий указанному полному шаблону. Вы ожидаете, что он вернет только кусок, соответствующий диким картам. К сожалению, это не так, как работает регулярное выражение. Вам все равно нужно проанализировать результаты регулярного выражения для битов интересующих вас строк.

И для разбора HTML, как упоминает loeschg, вам лучше работать с библиотекой разбора HTML.

0

Вы хотите использовать группу если вы хотите только часть линии. Вы делаете это, окружив часть, которую вы хотите получить позже в скобках, и, возможно, называя это что-то вроде:

?<name> 

Итак:

Match m = Regex.Match(@"<a href='/extend/themes/bizway'>BizWay</a>", 
         @"<a href='/extend/themes/(?<word1>.+)'>(?<word2>.+)</a>"); 
Console.WriteLine(m.Groups["word1"] + " " + m.Groups["word2"]); 

печать Будет ли «bizway BizWay».

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