如何在列表中转换正则表达式结果?

时间:2016-02-18 19:20:34

标签: c# 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>

如何才能获得该结果?

2 个答案:

答案 0 :(得分:3)

这让我们得到了所有的比赛:

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();

答案 1 :(得分:1)

这应该对你有用:

ColorUtils.pickColor(onColorPicked, this);

我更改了添加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>