2012-04-08 47 views
3
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); 
} 

进出卖出期权Regex.Split空白

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: 

正如你可以在1,3和最后一个记号看空字符串,我不能够理解为什么这种结果,有在给定的字符串中不是空字符串。

我不希望这是结果

回答

4

尝试:

 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); 
     } 

enter image description here

2

这是因为 “IF” 和 “(” 是分离器和因为没有什么的“IF”左侧,“IF”和“(”之间没有任何空白条目,从模式中删除“IF”。

string pattern = @"(\()|(\))|(\,)"; 

UPDATE

您可以搜索的标记,而不是分割字符串

var matches = Regex.Matches(str, @"\w+|[().,]|=="); 

这exacly返回文本的标记。

string[] array = matches.Cast<Match>().Select(m => m.Value).ToArray(); 
 
    [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]: ")" 

UPDATE

另一个Regex模式可以用Regex.Split一起尝试是

@"\b" 

它将在文字文本分割boundries

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

是的,你是正确的,如果我删除如果然后空字符串从1和3位置删除,但仍然在最后的位置,我不删除如果和继续相同的模式,但只是删除RegexOptions.IgnoreCase然后我得到了相同的结果使用你的模式... – jats 2012-04-08 19:40:40

+1

因为如果区分大小写,它不会识别“if”。你不能避免最后一个空的条目,因为“)”是一个分隔符,它将剩下的东西与正确的东西分隔开来,因为右边没有任何东西可以获得最后一个空条目。 – 2012-04-08 19:50:13