.NET:返回字符串列表,并给出要匹配的整个单词列表

时间:2019-03-19 23:05:58

标签: c# regex string match string-matching

我需要通过一组完整的单词将一个字符串分成多个子字符串。

输入: storyboard?.instantiateViewController()

输出(由word wo wordword分隔):

str1:word

str2:word

输出(由[space]wo wordword分隔):

str1:wo

str2:word[space]

str3:wo

所需方法的方法签名应如下所示:

[space]wordword

注意事项:

  • 仅单词匹配

  • 空白应保留

  • 分隔符列表仅包含不同的单词

  • 分隔符不包含空格

  • 匹配项应不区分大小写

使用这种方法,我将能够在UI窗口中突出显示整个单词匹配,并能够匹配具有不同突出显示的多个单词,但是我无法使用正则表达式来解决问题。

当前,我有一个非正则表达式解决方案,但这不是很好:

public List<string> GetPhrases(string text, List<string> splitters);

问题是我不维护换行符之类的空白,而是将其替换为空格。

1 个答案:

答案 0 :(得分:2)

如果分隔符只是字母数字或下划线字符,则可以使用

var results = Regex.Split(s, $@"\b({string.Join("|", splitters)})\b")
                   .Where(s => !string.IsNullOrEmpty(s))

在这里,\b(word1|word2)\b模式将分隔符作为整个单词进行匹配,由于周围存在捕获组(Regex.Split),(...)会将字符串分为匹配和不匹配的块模式中的分隔符。

.Where(s => !string.IsNullOrEmpty(s))将过滤出空字符串,这些空字符串通常在匹配是连续匹配或在字符串的开头/结尾时出现。

请参见regex demo

enter image description here