2012-04-08 117 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