按字符串数组拆分字符串,并包含用于在C#中的最终数组中拆分的字

时间:2017-03-10 15:06:18

标签: c# arrays string

我试图将字符串拆分为字符串数组中的单词周围的数组。现在,我使用myString.Split(arrayOfWordsToSplitOn, StringSplitOptions.RemoveEmptyEntries)来分割字符串,但不包含它正在分割的实际单词。

例如,如果我有字符串"My cat and my dog are very lazy"和字符串数组{"cat", "dog"},那么它现在返回{"My", "and my", "are very lazy"}

但是,我希望最终输出为{"My", "cat", "and my", "dog", "are very lazy"}。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以从搜索词列表中创建基于交替的正则表达式,并使用捕获组(...)包裹该部分。然后,添加\s*以剥离组周围的空白并使用Regex.Split

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var arrayOfWordsToSplitOn = new List<string> { "cat", "dog" };
        var s = "My cat and my dog are very lazy";
        var pattern = string.Format(@"\s*\b({0})\b\s*", string.Join("|", arrayOfWordsToSplitOn));
        var results = Regex.Split(s, pattern).Where(x => !String.IsNullOrWhiteSpace(x)).ToList();
        foreach (var res in results)
            Console.WriteLine(res);
    }
}

请参阅C# demo

结果:

My
cat
and my
dog
are very lazy

备注:

  • 如果搜索词可以包含非单词字符,则应调整模式,因为\b(单词边界)可能会使匹配失败,并且搜索&#34;单词&#34;必须是Regex.Escape d
  • 如果您决定删除字边界,搜索字数组可能需要按长度和字母排序。