关于.net:如何在C#中用多字符分隔符拆分字符串?

How do I split a string by a multi-character delimiter in C#?

如果我想使用一个作为单词的分隔符拆分一个字符串怎么办?

例如,This is a sentence

我想拆分is,得到Thisa sentence

Java中,我可以发送一个字符串作为分隔符,但如何在C#中完成这一点?


http://msdn.microsoft.com/en-us/library/system.string.split.aspx

文档示例:

1
2
3
4
5
6
7
8
9
10
11
string source ="[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] {"[stop]"};
string[] result;

// ...
result = source.Split(stringSeparators, StringSplitOptions.None);

foreach (string s in result)
{
    Console.Write("'{0}'", String.IsNullOrEmpty(s) ?"<>" : s);
}


您可以使用regex.split方法,如下所示:

1
2
3
4
5
6
7
Regex regex = new Regex(@"\bis\b");
string[] substrings = regex.Split("This is a sentence");

foreach (string match in substrings)
{
   Console.WriteLine("'{0}'", match);
}

编辑:这符合您给出的示例。注意,一个普通的string.split也将在单词"this"的末尾"is"上进行拆分,因此我为什么使用regex方法并在"is"周围包含单词边界。但是请注意,如果您刚刚错误地编写了这个示例,那么string.split可能就足够了。


基于此日志上现有的响应,这简化了实现:)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace System
{
    public static class BaseTypesExtensions
    {
        /// <summary>
        /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator
        /// </summary>
        /// <param name="s"></param>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public static string[] Split(this string s, string separator)
        {
            return s.Split(new string[] { separator }, StringSplitOptions.None);
        }


    }
}


1
2
3
4
5
string s ="This is a sentence.";
string[] res = s.Split(new string[]{" is" }, StringSplitOptions.None);

for(int i=0; i<res.length; i++)
    Console.Write(res[i]);

编辑:"is"用数组中的空格填充在两边,以保留这样一个事实,即您只希望"is"这个词从句子中删除,而"this"这个词保持不变。


简而言之:

1
string[] arr ="This is a sentence".Split(new string[] {"is" }, StringSplitOptions.None);

您可以使用string.replace()将所需的拆分字符串替换为字符串中未出现的字符,然后在该字符上使用string.split来拆分结果字符串以获得相同的效果。


或使用此代码;(相同:新字符串[])

1
.Split(new[] {"Test Test" }, StringSplitOptions.None)

下面是使用字符串分隔符进行拆分的扩展函数:

1
2
3
4
public static string[] Split(this string value, string seperator)
{
    return value.Split(new string[] { seperator }, StringSplitOptions.None);
}

使用示例:

1
2
string mystring ="one[split on me]two[split on me]three[split on me]four";
var splitStrings = mystring.Split("[split on me]");

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var dict = File.ReadLines("test.txt")
               .Where(line => !string.IsNullOrWhitespace(line))
               .Select(line => line.Split(new char[] { '=' }, 2, 0))
               .ToDictionary(parts => parts[0], parts => parts[1]);


or

    enter code here

line="[email protected][email protected]";
string[] tokens = line.Split(new char[] { '=' }, 2, 0);

ans:
tokens[0]=to
token[1]=xxx@gmail.com=yyy@yahoo.co.in

1
2
3
4
5
string strData ="This is much easier"
int intDelimiterIndx = strData.IndexOf("is");
int intDelimiterLength ="is".Length;
str1 = strData.Substring(0, intDelimiterIndx);
str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength));