【发布时间】:2018-04-26 20:41:17
【问题描述】:
我目前正在从事一个项目,我需要将单个单词与字符串分开。问题是字符串中的所有单词都是大写的并且没有空格。以下是程序正在接收的输入类型的示例:
“电脑五码色”
这应该分成以下结果:
“电脑” “五” “代码” “颜色”
到目前为止,我一直在使用以下方法来拆分我的字符串(它适用于除此边缘情况之外的所有场景):
private static List<string> NormalizeSections(List<string> wordList)
{
var modifiedList = new List<string>();
foreach (var word in wordList)
{
int index = wordList.IndexOf(word);
var split = Regex.Split(word, @"(\p{Lu}\p{Ll}+)").ToList();
split.RemoveAll(i => i == "");
modifiedList.AddRange(split);
}
return modifiedList;
}
如果有人对如何处理这个问题有任何想法,我会很高兴听到他们的声音。另外,如果我可以提供更多信息,请告诉我。
【问题讨论】:
-
如果没有任何东西来界定一个词是什么,你如何确定一个词?您对单词类型或允许单词的字典有某种限制吗?即便如此,想象一下你得到了“GRAINSTOP”。应该解析为“GRAIN”“STOP”还是“GRAINS”“TOP”?
-
在您的算法中要考虑的是如何处理字符组合,这些字符本身就是单词,但也是另一个单词的子字符串。例如,如果“TELEVISION”作为您输入的一部分出现,那么您的单词列表中的“VISION”可能会消耗字母并留下“TELE”本身以保持不匹配。如果担心这种情况,您可能会受益于按长度降序对源单词列表进行排序。
标签: c# string split text-parsing