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

时间:2016-02-26 07:02:03

标签: c# regex foreach console.writeline

嗨,谢谢阅读。 我遇到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我的问题是“"这是第一场比赛"在所有比赛后显示,而不是在每场比赛后显示。 我想单独操纵每场比赛。因为而不是写作线,我将把每个匹配的值分配给一个对象,所以如果我有5个匹配意味着5个对象。

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

@""verbatim string literal。在其中,所有反斜杠(和转义序列)都被视为文字(@"\n"是一个包含2个字符\n的字符串,而不是换行符号)。写@"\s+"以匹配1个或更多空格而非"\\s+"非常方便。

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'