【发布时间】:2019-08-10 14:02:17
【问题描述】:
我需要通过一组完整的单词将字符串拆分为子字符串。
输入:
word wo wordword
输出(由word分割):
str1:word
str2:[space]wo wordword
输出(由wo分割):
str1:word[space]
str2:wo
str3:[space]wordword
所需方法的方法签名应如下所示:
public List<string> GetPhrases(string text, List<string> splitters);
注意事项:
仅匹配整个单词
应保留空格
拆分列表仅包含不同的单词
分隔符不包含空格
匹配项不区分大小写
使用此方法,我将能够在 UI 窗口中突出显示整个单词匹配项,并能够匹配具有不同突出显示的多个单词,但我无法使用正则表达式。
目前,我有一个非正则表达式的解决方案,但不是很好:
var words = Regex.Split(text, @"\s+").Where(s => s != string.Empty).ToList();
var str = "";
var list = new List<string>();
foreach (var word in words)
{
if (!splitters.Contains(word))
{
if(words.IndexOf(word) != words.Count - 1)
str += word + " ";
else
str += word;
}
else
{
if(!string.IsNullOrWhitespace(str))
list.Add(str);
list.Add(word);
str = "";
}
}
if(!string.IsNullOrWhitespace(str))
list.Add(str);
问题是我没有像换行符那样维护任何空格,而是用空格替换它们。
【问题讨论】:
-
这是意向声明,不是问题。还要指定是否要区分大小写。以及您使用可测试示例尝试过的任何代码
-
StackOverflow 不是编码服务,需求列表不是问题。你到底在哪里卡住了,你实际的编程相关问题是什么?声誉 > 1000 分,我希望您知道这一点...
-
@MichaelRandall 如果这听起来像一个意图,我很抱歉。我确实尝试了很多东西,但我不想发布复杂的代码来迷惑人们。我不在乎区分大小写。
-
恰恰相反,它帮助我们复制代码、测试和调整。尤其是输入列表和预期结果
-
@MichaelRandall 我已经在问题的开头提供了一个示例输入和输出列表。我会补充更多。它基本上是根据不区分大小写的精确整个单词匹配来拆分文本。
标签: c# regex string match string-matching