如何拆分分隔符保留在结果末尾的字符串

本文关键字:结果 字符串 保留 分隔符 何拆分 拆分 | 更新日期: 2023-09-27 18:28:35

我有几个分隔符。例如{del1、del2、del3}。假设我有文本:Text1 del1 text2 del2 text3 del3

我想以这样的方式拆分字符串:

  1. 文本1 del1
  2. 文本2 del2
  3. 文本3 del3

当数组的每个元素都是texti-deli时,我需要获得字符串数组。我如何在C#中做到这一点?

如何拆分分隔符保留在结果末尾的字符串

String.Split允许多个拆分的delimeter。我不知道这是否符合你的问题。

示例:

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

编辑:您可以使用正则表达式来保留delimeters。

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

注意,对于两个'-'的匹配项,您将在子字符串数组中收到空字符串;最后,你可以选择忽略这些值,或者用这些值做你喜欢的事情。

您可以使用正则表达式。对于类似"text1;text2|text3^"的字符串,您可以使用以下内容:

(.*;|.*'||.*'^)

只需为每个分隔符添加更多可选模式。

如果您想在分割字符串时保留分隔符,可以使用以下方法:

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" 

按照@Matt Burland的建议,使用Regex

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