我需要通过一组完整的单词将一个字符串分成多个子字符串。
输入:
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);
问题是我不维护换行符之类的空白,而是将其替换为空格。
答案 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: