我试图将字符串拆分为字符串数组中的单词周围的数组。现在,我使用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"}
。有没有办法做到这一点?
答案 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