繁体   English   中英

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

[英]Split string by array of strings, and include words used to split in final array in C#

我正在尝试将字符串拆分为字符串数组中单词周围的数组。 现在,我正在使用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"} 有什么办法吗?

您可以从搜索词列表中创建基于替代的正则表达式,然后用捕获组(...)包装该部分。 然后,添加\\s*Regex.Split组周围的空白并使用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#演示

结果:

My
cat
and my
dog
are very lazy

笔记:

  • 如果搜索词可以包含非单词字符,则应将模式调整为\\b (单词边界)可能会导致匹配失败,并且搜索“单词”必须为Regex.Escape d
  • 如果您决定放弃单词边界,则搜索单词数组可能需要按长度和字母排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM