簡體   English   中英

Regex.Split 空白

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM