簡體   English   中英

如何分割字符串,分隔符保留在結果的末尾?

[英]How to split string that delimiters remain in the end of result?

我有幾個分隔符。 例如{del1,del2,del3}。 假設我有文本:Text1 del1 text2 del2 text3 del3

我想以這種方式拆分字符串:

  1. Text1 del1
  2. text2 del2
  3. text3 del3

當數組的每個元素都是texti deli時,我需要獲取字符串數組。 我怎么能在C#中做到這一點?

String.Split允許多個拆分 - 分隔符。 我不知道這是否適合你的問題。

示例:

    String text = "Test;Test1:Test2#Test3";
    var split = text.Split(';', ':', '#');
   //split contains an array of "Test", "Test1", "Test2", "Test3"

編輯:您可以使用正則表達式來保持分米。

 String text = "Test;Test1:Test2#Test3";
 var split = Regex.Split(text, @"(?<=[;:#])");
 // contains "Test;", "Test1:", "Test2#","Test3"

這應該做的伎倆:

    const string input = "text1-text2;text3-text4-text5;text6--";
    const string matcher= "(-|;)";

    string[] substrings = Regex.Split(input, matcher); 

    StringBuilder builder = new StringBuilder();
    foreach (string entry in substrings)
    {
        builder.Append(entry);
    }

    Console.Out.WriteLine(builder.ToString());

請注意,您將在子字符串數組中收到空字符串,以便最后兩個' - '; s的匹配,您可以選擇忽略或使用這些值執行您喜歡的操作。

如果要在拆分字符串時保留分隔符,可以使用以下命令:

string[] delimiters = { "del1", "del2", "del3" };

string input = "text1del1text2del2text3del3";
string[] parts = input.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

for(int index = 0; index < parts.Length; index++)
{
    string part = parts[index];
    string temp = input.Substring(input.IndexOf(part) + part.Length);

    foreach (string delimter in delimiters)
    {
        if ( temp.IndexOf(delimter) == 0)
        {
            parts[index] += delimter;
            break;
        }
    }
}

parts將是:

    [0] "text1del1" 
    [1] "text2del2" 
    [2] "text3del3" 

你可以使用正則表達式。 對於像這樣的字符串“text1; text2 | text3 ^”,你可以使用這個:

(.*;|.*\||.*\^)

只需為每個分隔符添加更多替代模式。

正如@Matt Burland建議的那樣,使用正則表達式

List<string> values = new List<string>();
string s = "abc123;def456-hijk,";

Regex r = new Regex(@"(.*;|.*-|.*,)");
foreach(Match m in r.Matches(s))
   values.Add(m.Value);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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