[英]Regex.Split White Space
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);
}
輸出是
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 和最后一個標記中看到的空字符串,我無法理解為什么會出現這種結果,我給定的字符串中沒有空字符串。
我不希望這是結果
試試看:
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);
}
發生這種情況是因為“IF”和“(”是分隔符,並且由於“IF”左側沒有任何內容,“IF”和“(”之間也沒有任何內容,所以您得到這兩個空條目。從模式中刪除“IF”。
string pattern = @"(\()|(\))|(\,)";
更新
您可以搜索標記而不是拆分字符串
var matches = Regex.Matches(str, @"\w+|[().,]|==");
這會准確地返回您的文本的標記。
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]: ")"
更新
您可以與Regex.Split
一起嘗試的另一種正則Regex
模式是
@"\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]: ")"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.