假设我有一些名称的自由格式条目,其中一些采用“姓氏,名字”格式,而另一些采用“名字姓氏”格式(例如“Bob MacDonald”和“MacDonald. Bob”都是展示)。
据我了解,Lucene 索引不允许在句子开头使用通配符,那么我可以通过哪些方式找到两者。这适用于 neo4j 和 py2neo,因此欢迎使用 lucene 模式匹配或 python 正则表达式匹配的解决方案。
我对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)
两者都返回匹配项。希望这可以帮助。
你能用OR
吗?"Hilary Clinton" OR "Clinton, Hilary"
?