C#如何避免在.Splitt()中拆分名称
本文关键字:拆分 何避免 Splitt | 更新日期: 2023-09-27 18:21:52
所以基本上我有一个循环,在这个循环中,processedPensionesList中的每个句子都会被迭代和扫描,以查找列表entityString内存在的单词。在每个句子中找到的每个entityString都被添加到var valid_words中。
但是实体";《哈利波特》;以及";福特汽车;由于"sentent.Split()"语句,未添加。
如何修改此代码,使带有空格的现有实体不会被分隔为两个单词?
List <string> entityString = new List<string>();
entityString.Add("Harry Potter"); //A name which i do not want to split
entityString.Add("Ford Car"); //A name which i do not want to split
entityString.Add("Broom");
entityString.Add("Ronald");
List <string> processedSentencesList = new List<string>();
processedSentencesList.Add("Harry Potter is a wizard");
processedSentencesList.Add("Ronald had a Broom and a Ford Car");
foreach (string sentence in processedSentencesList)
{
var words = sentence.Split(" ".ToCharArray());
//But it splits the names as well
var valid_words = words.Where(w =>
entityStrings.Any(en_li => en_li.Equals(w)));
//And therefore my names do not get added to the valid_words list
}
打印时,我现在得到的输出:
扫帚
罗纳德
我期望的输出:
哈利波特
福特汽车
扫帚
罗纳德
基本上,在(2个或更多单词)之间有空格的实体会被分离,因此无法与现有实体匹配。我该如何解决这个问题?
使用以下内容更改foreach
:
List<String> valid_words = new List<String>();
foreach (string sentence in processedSentencesList)
{
valid_words.AddRange(entityString.Where(en_li => sentence.Contains(en_li)));
}
valid_words = valid_words.Distinct().ToList();
您可以尝试匹配而不是拆分。
[A-Z]'S+(?:'s+[A-Z]'S+)?
演示
您可以循环遍历每个项目并使用"String.Contains()"方法,这将防止您不得不拆分搜索字符串。
示例:
List<string> valid_words = new List<string>();
foreach (string sentence in processedSentencesList)
{
foreach (string entity in entityString)
{
if (sentence.Contains(entity))
{
valid_words.Add(entity);
}
}
}