elasticsearch regexp don';行不通
我需要在elasticsearch上做一个regexp来过滤一些数据。 我筛选的字段是人名。数据的格式并不总是很好(有时没有名字,有时姓氏后面跟着句点或逗号或“逗号+名字”或“点+名字”…) 例如,使用“bouchard”可以获得以下匹配:elasticsearch regexp don';行不通,regex,
elasticsearch,Regex,
elasticsearch,我需要在elasticsearch上做一个regexp来过滤一些数据。 我筛选的字段是人名。数据的格式并不总是很好(有时没有名字,有时姓氏后面跟着句点或逗号或“逗号+名字”或“点+名字”…) 例如,使用“bouchard”可以获得以下匹配: "bouchard", "bouchard, m.", "bouchard, j.", "bouchard j.p.", "bouchard. j.p." 我还需要排除以“bouchardat”等相同前缀开头的名称 我尝试了许多正则表达式,最后发现排除可
"bouchard", "bouchard, m.", "bouchard, j.", "bouchard j.p.", "bouchard. j.p."
我还需要排除以“bouchardat”等相同前缀开头的名称
我尝试了许多正则表达式,最后发现排除可能会产生更好的结果:
"query" : { "regexp" : {
"RECORDEDBY" : "bouchard([^a-z].*)"
}}
这不起作用,因为它返回“bouchard,m.”、“bouchard,j.”、“bouchard j.p.”,但不返回“bouchard.j.p.”,也不返回“bouchard”
我尝试了一些带有+和。*的正则表达式,但它们不起作用
( "bouchard([^a-z].*.*)" "bouchard([^a-z]*+.*)")
为了明确起见,我想允许:
bouchard
bouchard, m.
bouchard, j.
bouchard j.p.
bouchard. j.p.
我想排除在外
bouchardat
欢迎提供任何建议。在这种情况下,如果您要查找的单词后面没有诸如“
”、“
”或“”、
”之类的特殊字符,则可以使用a来排除每个[a-z]
后缀:
((bouchard)+?([ .,]+)[ ,.a-zA-Z]*)|(bouchard[^a-zA-Z]?)
此regexp返回条件(必须有[,]+
):
并忽略管道|
后的内容,其中不适用[,]+
:
bouchardat
您能更具体一点吗?您允许哪些条目,哪些条目不允许?文档中说Elasticsearch正则表达式总是锚定的,因此
“RECORDEDBY”:“bouchard”
只允许bouchard
,而“RECORDEDBY”:“bouchard.+”
应该允许任何以bouchard
开头的值。抱歉。我想排除“bouchardat”并允许“bouchard”、“bouchard,m.”、“bouchard,j.”、“bouchard j.p.”、“bouchard.j.p.”以及所有名称相同、后跟空格/点/coma和任何单词的条目。然后,尝试使用bouchard[^a-zA-Z]*
bouchard[^a-zA-Z]*只返回“bouchard”,而不返回“bouchard,m.”、“bouchard,j.”,“bouchard j.p.”,“bouchard j.p.”“bouchard[^a-zA-Z]*.*返回“bouchard”,“bouchard,m.”,“bouchard,j.”,“bouchard j.p.”,“bouchard j.p.”,“bouchard j.p.”,“bouchardat”。它错过了“bouchard.j.p.”并允许使用“bouchardat”,感谢您解释的解决方案。不幸的是,它没有返回“bouchard”“。字符逗号、空格和点不需要转义?当然,?
结尾处缺少。更新并添加了reges101链接。当然,您希望捕获整个组,所以再次更新。非常感谢。也感谢Regex101站点。(bouchard+[^a-zA-Z]?)
这一个将匹配boucharddddddd(d的内码数)。我根本看不出d之后出现此+
的原因
bouchardat