【问题标题】:How to convert a Regex result in a list? [duplicate]如何将正则表达式结果转换为列表? [复制]
【发布时间】:2016-02-18 19:20:33
【问题描述】:

如何将正则表达式的结果列表放入列表中?

我将以我的情况为例:我有以下 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>

我怎样才能得到这个结果?

【问题讨论】:

  • 我认为this link 回答了您的问题。 :)
  • 你必须使用capturing groups

标签: c# regex


【解决方案1】:

这为我们提供了所有匹配项:

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

让我们将此IEnumerable 转换为IEnumerable&lt;Match&gt;。这是必要的,因为 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();

【讨论】:

    【解决方案2】:

    这应该适合你:

    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
    }
    

    我更改了添加? 的正则表达式,因为它只捕获字符串中从第一个&lt;p&gt; 到最后一个&lt;/p&gt; 的一个结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多