如何比较字符串并选择一个匹配的

本文关键字:一个 选择 字符串 何比较 比较 字符 串并 | 更新日期: 2023-09-27 18:15:10

我有一个这样的字符串:

string myString1 = "DOE, JOHN BE DOE, JANE"; //or
string myString2 = "DOE SMITH, JOHN BE DOE SMITH, JANE MARIE"; //or
string myString3 = "DOE, JOHN DOE, JANE"; //or

和一个名为People的记录列表,如下所示:

Name     | Surname      | Family
JOHNBE   | DOE          | JANE DOE
JOHNDA   | DOE          | JANE DOE
JOHNMU   | DOE          | JANE DOE
JANE     | SMITH        | MARIE SMITH
PAUL     | CARTER       | JOSEPH CARTER
...

我想选择第一个记录时,字符串是像myString1。

我还需要它来确定是否发生了其他情况。

我试着:

把myString放到一个列表中:

var myList = {"DOE", "JOHN", "BE", "DOE", "JANE"}

并检查是否包含。

var test = People.Where(p => myList.Contains(p.Name));

返回0,因为Name不存在。

尝试选择" "之后的第一个单词,像这样:

var name = myString.Substring(item.ChildName.IndexOf(",") + 2).Split(' ').FirstOrDefault();

返回"JOHN"则:

var test = People.Where(p => p.Name.Contains(name));

返回3条记录。

问题来了:

当我运行myString1时,它返回0,它应该选择第一个记录,列名称有名称和中间名称在一起,所以有时它会在一起,有时在两个单词中分开,例如。约翰比约翰比约翰。这有意义吗?

myString将是姓氏,firstname空间,middlename空间,surnameForFamily, firstname, family空间,middleameforfamily

有人知道怎么做这个搜索吗?

如何比较字符串并选择一个匹配的

我可以使用相等比较器使其工作。

public class NameComparer : IEqualityComparer<string>
{
    public bool Equals(string x, string y)
    {
        if (y.Contains(x))
            return true;
        return false;
    }
    public int GetHashCode(string obj)
    {
        return obj.GetHashCode();
    }
}

然后在你的查询实现如下:

var myList = new List<string>() { "DOE", "JOHN", "BE", "DOE", "JANE" };          
var comp = new NameComparer();
var test = People.Where(x => myList.Contains(x.Name, comp));

通过使用Pieter的部分建议使其工作。

解决方案:

开始从mystring1中获取名字,例如:"JOHN",这是字符串中唯一有效的已知部分(第一个逗号后的第一个单词),

然后在People表中,我选择与单词"JOHN"匹配的所有内容,它返回3行,从列名中剥离单词"JOHN",最后根据myList检查列名,它只返回右行。在mystring1中可能出现的其他情况下进行了测试,并且似乎工作正常。

谢谢Pieter的建议