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个或更多单词)之间有空格的实体会被分离,因此无法与现有实体匹配。我该如何解决这个问题?

C#如何避免在.Splitt()中拆分名称

使用以下内容更改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);
    }
  }
}