C# 如何在分隔符上拆分字符串,并将分隔符保留为结果数组中的元素?

C# 如何在分隔符上拆分字符串,并将分隔符保留为结果数组中的元素?,c#,regex,string,C#,Regex,String,这个问题在这个网站上有两种提问方式:第一种方式实际上是一个不同的问题;OP希望将分隔符保留在结果元素的末尾/开头。第二个问题的答案包括一个正则表达式,我不知道如何扩展它 我正在寻找一种在分隔符上拆分字符串的方法,分隔符将作为元素包含在结果数组中。请解释如何为该函数选择自定义分隔符(最可能是正则表达式)。您仍然可以使用string.Split并将分隔符保留在数组中。请参见此扩展方法: public static class StringExtensions { public static

这个问题在这个网站上有两种提问方式:第一种方式实际上是一个不同的问题;OP希望将分隔符保留在结果元素的末尾/开头。第二个问题的答案包括一个正则表达式,我不知道如何扩展它

我正在寻找一种在分隔符上拆分字符串的方法,分隔符将作为元素包含在结果数组中。请解释如何为该函数选择自定义分隔符(最可能是正则表达式)。

您仍然可以使用string.Split并将分隔符保留在数组中。请参见此扩展方法:

public static class StringExtensions
{
    public static string[] SplitAndKeep(this string s, string[] seperators)
    {
        string[] obj = s.Split(seperators, StringSplitOptions.None);
        List<string> result = new List<string>(obj.Length * 2 - 1);

        for (int i = 0; i < obj.Length; i++)
        {
            result.Add(obj[i]);
            if (i < obj.Length - 1) result.Add(separator);
        }
        return result.ToArray();
    }
}
您仍然可以使用string.Split并将分隔符保留在一个数组中。请参见此扩展方法:

public static class StringExtensions
{
    public static string[] SplitAndKeep(this string s, string[] seperators)
    {
        string[] obj = s.Split(seperators, StringSplitOptions.None);
        List<string> result = new List<string>(obj.Length * 2 - 1);

        for (int i = 0; i < obj.Length; i++)
        {
            result.Add(obj[i]);
            if (i < obj.Length - 1) result.Add(separator);
        }
        return result.ToArray();
    }
}

您可以使用一个正则表达式,该正则表达式指定一个带有前向或后向的空表达式

例如,假设您希望在以下任一字符上拆分字符串:

'(' ' ' ',' ')' '*' '/' '+' '-'

然后您可以构造一个表达式,将它们列在lookahead或lookahead子句中,即?=。。。或者?您可以使用一个正则表达式,该正则表达式指定一个带有前向或后向的空表达式

例如,假设您希望在以下任一字符上拆分字符串:

'(' ' ' ',' ')' '*' '/' '+' '-'

然后您可以构造一个表达式,将它们列在lookahead或lookahead子句中,即?=。。。或者?我想,但我不确定,有多个分隔符,在这种情况下,你的答案将不合适。不知何故,我过火了。我更新了我的答案,谢谢你的提示。没问题。但是现在您有一个更大的问题:String.Split不指示拆分的分隔符,因此您不知道将哪个分隔符放入数组中。你的代码不会生成。我想,但我不确定,是否有多个分隔符,在这种情况下,你的答案将不合适。不知何故,我过火了。我更新了我的答案,谢谢你的提示。没问题。但是现在您有一个更大的问题:String.Split不指示拆分的分隔符,因此您不知道将哪个分隔符放入数组中。您的代码实际上无法生成。