Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式。分割空白_C# - Fatal编程技术网

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]: ")"