Регулярные выражения, группа захвата
Это будет образец текста:
<option value="USD">American Samoa, United States Dollar (USD)</option>
<option value="EUR">Andorra, Euro (EUR)</option>
<option value="AOA">Angola, Kwanza (AOA)</option>
<option value="XCD">Anguilla, East Caribbean Dollar (XCD)</option>
<option value="XCD">Antigua and Barbuda, East Caribbean Dollar (XCD)</option>
<option value="ARS">Argentina, Peso (ARS)</option>
Это моя попытка:
<option selected="selected" value="[A-Z]{3}">(?<Test>).+</option>
,
Проблема в том, что он соответствует только первому вхождению, которое он находит. Пока я хочу, чтобы они все получили. Чего мне не хватает в моей попытке?
2 ответа
Regex не рекомендуется для анализа HTML.
Почему вы не используете HTML Agility Pack?
http://htmlagilitypack.codeplex.com/
Вот пример:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("YOUR HTML STRING");
foreach(HtmlNode node in doc.DocumentElement.SelectNodes("//select/option[@selected='selected']")
{
string text = node.InnerHtml; // "American Samoa, United States Dollar (USD)"
string value = node.Attributes["value"].Value; // "USD"
}
Вы также можете скачать через NuGet =)
Если вам нравится это решение, вы можете прочитать немного больше о XPath:
http://www.w3schools.com/XPath/xpath_syntax.asp
Если вы все еще хотите использовать Regex, вы можете проверить этот сайт:
Вы говорите о чем-то вроде этого регулярного выражения:
<option value=""[A-Z]{3}""[^<]*</option>
Вот полная программа на C#, смотрите вывод в нижней части демонстрации C#.
using System;
using System.Text.RegularExpressions;
using System.Collections.Specialized;
class Program {
static void Main() {
string s1 = @"<option value=""USD"">American Samoa, United States Dollar (USD)</option>
<option value=""EUR"">Andorra, Euro (EUR)</option>
<option value=""AOA"">Angola, Kwanza (AOA)</option>
<option value=""XCD"">Anguilla, East Caribbean Dollar (XCD)</option>
<option value=""XCD"">Antigua and Barbuda, East Caribbean Dollar (XCD)</option>
<option value=""ARS"">Argentina, Peso (ARS)</option>";
var myRegex = new Regex(@"<option value=""[A-Z]{3}""[^<]*</option>");
MatchCollection AllMatches = myRegex.Matches(s1);
Console.WriteLine("\n" + "*** Matches ***");
if (AllMatches.Count > 0) {
foreach (Match SomeMatch in AllMatches) {
Console.WriteLine("Overall Match: " + SomeMatch.Value);
}
}
Console.WriteLine("\nPress Any Key to Exit.");
Console.ReadKey();
} // END Main
} // END Program