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个或多个空格很方便
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'
您好,感谢阅读。 我有 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+"
.
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'