2

假设我有一些名称的自由格式条目,其中一些采用“姓氏,名字”格式,而另一些采用“名字姓氏”格式(例如“Bob MacDonald”和“MacDonald. Bob”都是展示)。

据我了解,Lucene 索引不允许在句子开头使用通配符,那么我可以通过哪些方式找到两者。这适用于 neo4j 和 py2neo,因此欢迎使用 lucene 模式匹配或 python 正则表达式匹配的解决方案。

4

2 回答 2

4

我对neo4j或lucene不熟悉,但我想我会提供一个我不久前在这个问题上找到的Python正则表达式解决方案:Logical operator AND with php regular expression

基本上,您可以调整他的答案以适应这个特定问题:您需要名字和姓氏,但您不知道顺序。它们可能在字符串中有空格或逗号。

这是我想出的正则表达式:(?:\s?Hilary()|\s?Clinton(),?){2}

它测试名字前面有一个可选空格,或者姓氏前面有一个可选空格,或者后面有一个逗号。后面的空括号表示如果满足条件,它将返回一个匹配项,而 {2} 表示它需要两个匹配项(名字和姓氏)。

在 python 中测试它:

import re
t1 = 'Hilary Clinton'
t2 = 'Clinton, Hilary'
re.search(r'(?:\s?Hilary()|\s?Clinton(),?){2}', t1)
re.search(r'(?:\s?Hilary()|\s?Clinton(),?){2}', t2)

两者都返回匹配项。希望这可以帮助。

于 2013-04-30T00:32:33.090 回答
1

你能用OR吗?"Hilary Clinton" OR "Clinton, Hilary"?

于 2013-04-30T00:31:07.897 回答