Как преобразовать результат Regex в список?
Как я могу получить список результатов регулярного выражения в списке?
Я покажу свое дело в качестве примера: у меня есть следующий код строки 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>
Как я могу приступить к получению этого результата?
Это дает нам все матчи:
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();
Это должно работать для вас:
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>
в строке.