Как преобразовать результат Regex в список?

90
9

Как я могу получить список результатов регулярного выражения в списке?

Я покажу свое дело в качестве примера: у меня есть следующий код строки HTML:

<div>
<p>Hello World</p>
<p>Hello Stackoverflow</p>
<p>The book is on the table</p>
</div>

Мой регулярный фильтр следующий:

<p>(.*)</p>

Результатом, который я ищу, является следующий список:

<p>Hello World</p>
<p>Hello Stackoverflow</p>
<p>The book is on the table</p>

Как я могу приступить к получению этого результата?

спросил(а) 2016-02-18T22:20:00+03:00 4 года, 7 месяцев назад
1
Решение
70

Это дает нам все матчи:

var allMatches = Regex.Matches(input, pattern);

Позвольте преобразовать этот IEnumerable в IEnumerable<Match>. Это необходимо, потому что класс MatchCollection предшествует генерикам.NET:

var matchesTyped = allMatches.Cast<Match>();

Затем сопоставляем совпадения с согласованными значениями и выводим результат в список:

var matchedStrings = matchesTyped.Select(m => m.Value).ToList();

TL; DR

var result = Regex.Matches(input, pattern).Cast<Match>().Select(m => m.Value).ToList();

ответил(а) 2016-02-18T22:27:00+03:00 4 года, 7 месяцев назад
58

Это должно работать для вас:

string str = "<div>" +
"<p>Hello World</p>" +
"<p>Hello Stackoverflow</p>" +
"<p>The book is on the table</p>" +
"</div>";

string pattern = "<p>.*?</p>";

var matches = Regex.Matches(str, pattern);

var result = matches.Cast<Match>().Select(m => m.Value.Trim()).ToArray();

foreach (var item in result)
{
//do something
}

Я изменил добавление регулярных выражений ? потому что он фиксирует только один результат от первого <p> до последнего </p> в строке.

ответил(а) 2016-02-18T22:26:00+03:00 4 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема