foreach 循环与正则表达式匹配问题

foreach loop with regex matchs problems

您好,感谢阅读。 我有 Foreach 循环的问题。

据我所知,foreach 输出对所有阶段都完成一次。

这是我的问题的一个例子。

string[] substrings = Regex.Split(Input, splitPattern);
foreach (string match in substrings)
{
    Console.WriteLine("'{0}'" , match + "this is first match ") ;
}

输出为:

match 1 
match 2 
match 3 
this is first match

问题 1 我的问题是“这是第一场比赛”一词显示在所有比赛之后,而不是在每次比赛之后。 我想单独操纵每场比赛。因为不是 writeline,我打算将每个匹配项的值分配给一个对象,所以如果我有 5 个匹配项,则意味着 5 个对象。

问题 2:如何处理每个匹配项(有或没有 foreach 循环)。

感谢

如果你需要使用Regex.Split,你需要定义一个模式(我看你用的是假的xxx),然后使用Regex.Split,注意此函数可能 return 连续分隔符之间和字符串开头的空值。这种修剪可以用一些 LINQ 来完成:.Where(p => !string.IsNullOrWhiteSpace(p))。此 Where 将遍历 IEnumarable 集合中的所有元素,并检查元素是否为 null 或只是空白。如果该元素为 null 或只有空格,它将从结果中丢弃。 .ToList() 会将 IEnumerable 转换为字符串列表 (List<string>)。

因此,在 运行 Regex.Split 之后,从空字符串中删除结果。

@""verbatim string literal。在其中,所有反斜杠(和转义序列)都被视为文字(@"\n" 是一个包含 2 个字符的字符串,\n,不是换行符)。写成@"\s+""\s+".

匹配1个或多个空格很方便

Example:

using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var line = "xxx abcdef abcdef xxx zxcvbn zxcvbn xxx poiuy poiuy";
        var splts = Regex.Split(line, @"xxx").Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
        //Console.WriteLine(splts.Count()); // => 3
        foreach (string match in splts)
        {
           Console.WriteLine("'{0}'" , match);
        }
}

输出:

' abcdef abcdef '
' zxcvbn zxcvbn '
' poiuy poiuy'