假设我有一些名字的自由格式条目,其中一些是“姓氏,名字”格式,而其他的是“姓氏”(例如“Bob MacDonald”和“MacDonald”)格式。鲍勃“都在场”。
根据我所理解的,Lucene索引不允许在句子的开头使用通配符,那么我能找到两种方法。这是针对neo4j和py2neo的,因此我们欢迎使用lucene模式匹配或python regex匹配中的解决方案。

最佳答案

我不熟悉neo4j或lucene,但我想我会提供一个Python regex解决方案,我刚才在这个问题上发现: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)

两个都返回一个匹配项。希望这有帮助。

10-08 19:33