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

时间:2015-09-28 21:27:44

标签: c#

我有一个这样的字符串:

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));

我返回零,因为名称不存在。

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

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

返回" JOHN"然后:

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

这将返回3条记录。

所以这就是问题所在:

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

myString将是姓氏逗号firstname space middlename space surnameForFamily comma firstname for family space middlenameForFamily

任何人都知道如何进行此搜索?

2 个答案:

答案 0 :(得分:0)

我能够使用相等比较器使其工作。

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));

答案 1 :(得分:0)

通过使用部分Pieter建议让它工作。

解决方案:

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

然后在People表中我选择与“JOHN”一词匹配的所有内容,它返回3行,从列名中删除单词“JOHN”,最后检查列名称对myList,它只返回右行。测试了可能出现在mystring1中的其他情况,似乎工作正常。

感谢Pieter的建议。