C# 正则表达式。分割空白
而出局的是C# 正则表达式。分割空白,c#,C#,而出局的是 string pattern = @"(if)|(\()|(\))|(\,)"; string str = "IF(SUM(IRS5555.IRs001)==IRS5555.IRS001,10,20)"; string[] substrings = Regex.Split(str,pattern,RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase) ; foreach (string match in subs
string pattern = @"(if)|(\()|(\))|(\,)";
string str = "IF(SUM(IRS5555.IRs001)==IRS5555.IRS001,10,20)";
string[] substrings = Regex.Split(str,pattern,RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase) ;
foreach (string match in substrings)
{
Console.WriteLine("Token is:{0}", match);
}
正如您在1,3和最后一个标记中看到的空字符串,我无法理解为什么这种结果,在我给定的字符串中没有空字符串
我不想这是结果试试看:
Token is:
Token is:IF
Token is:
Token is:(
Token is:SUM
Token is:(
Token is:IRS5555.IRs001
Token is:)
Token is:==IRS5555.IRS001
Token is:,
Token is:10
Token is:,
Token is:20
Token is:)
Token is:
之所以会出现这种情况,是因为“IF”和(“IF”)是分隔符,而且“IF”的左边没有任何内容,而“IF”和(“IF”)之间也没有任何内容(“您得到这两个空条目。请从模式中删除“IF”)
string pattern = @"(if)|(\()|(\))|(\,)";
string str = "IF(SUM(IRS5555.IRs001)==IRS5555.IRS001,10,20)";
var substrings = Regex.Split(str, pattern, RegexOptions.IgnoreCase).Where(n => !string.IsNullOrEmpty(n));
foreach (string match in substrings)
{
Console.WriteLine("Token is:{0}", match);
}
更新 您可以搜索令牌,而不是拆分字符串
string pattern = @"(\()|(\))|(\,)";
这将精确地返回文本的标记
var matches = Regex.Matches(str, @"\w+|[().,]|==");
它将在单词边界处拆分文本
@"\b"
[0]: ""
[1] :“如果”
[2]: "("
[3] :“总和”
[4]: "("
[5] :“IRS5555”
[6]: "."
[7] :“IRs001”
[8]: ")=="
[9] :“IRS5555”
[10]: "."
[11] :“IRS001”
[12]: ","
[13]: "10"
[14]: ","
[15]: "20"
[16]: ")"
是的,如果我删除if,然后从1和3位置删除空字符串,但仍然在最后位置,我不删除if,继续使用相同的模式,但只删除RegexOptions,你是对的。IgnoreCase然后我得到了与使用你的模式获取相同的结果…因为它不识别“if”如果它区分大小写。您无法避免最后一个空条目,因为“)”是一个分隔符,它将左、右、右分开,并且因为右边没有任何内容,您将获得最后一个空条目。 [0]: "IF" [1]: "(" [2]: "SUM" [3]: "(" [4]: "IRS5555" [5]: "." [6]: "IRs001" [7]: ")" [8]: "==" [9]: "IRS5555" [10]: "." [11]: "IRS001" [12]: "," [13]: "10" [14]: "," [15]: "20" [16]: ")"
@"\b"
[0]: ""
[1]: "IF"
[2]: "("
[3]: "SUM"
[4]: "("
[5]: "IRS5555"
[6]: "."
[7]: "IRs001"
[8]: ")=="
[9]: "IRS5555"
[10]: "."
[11]: "IRS001"
[12]: ","
[13]: "10"
[14]: ","
[15]: "20"
[16]: ")"