首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Lucene 4 regexp查询社保号码

用Lucene 4 regexp查询社保号码
EN

Stack Overflow用户
提问于 2014-03-29 10:14:40
回答 3查看 1.5K关注 0票数 0

我正在尝试使用Lucene 4 Regexp查询来查找社会保险号。如果使用StandardAnalyzer或EnglishAnalyzer分析字段,是否仍有某种方法来匹配诸如222-33-4444222 33 4444之类的字符串。

据我所知,这些分析器标记SSN的组件,然后就无法捕获这3个组件的连续匹配。理想情况下,我希望222 33 4444能够匹配像"/[0-9]{3}/ /[0-9]{2}/ /[0-9]{4}/"这样的内容,但这似乎不是因为短语查询不能与正则表达式一起工作(是吗?)有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2014-03-31 07:23:46

如果只有一个标识符字段或类似的字段,那么可以使用StringField或其他一些未标记的字段,在这种情况下,定义一个简单的RegExpQuery就足够简单了。

如果您试图将它们从全文字段中提取出来,则必须对其进行标记化(我假设是这样的),您可以使用SpanQuery应用编程接口构造适当的查询:

代码语言:javascript
复制
SpanQuery span1 = new SpanMultiTermQueryWrapper(new RegexpQuery(new Term("text", "[0-9]{3}")));
SpanQuery span2 = new SpanMultiTermQueryWrapper(new RegexpQuery(new Term("text", "[0-9]{2}")));
SpanQuery span3 = new SpanMultiTermQueryWrapper(new RegexpQuery(new Term("text", "[0-9]{4}")));

Query query = new SpanNearQuery({span1, span2, span3}, 0, true);

searcher.search(query, maxResults)
票数 1
EN

Stack Overflow用户

发布于 2014-03-29 10:43:51

您可以使用INTERVAL标志:

代码语言:javascript
复制
/<000-999>/ /<00-99>/ /<0000-9999>/
票数 0
EN

Stack Overflow用户

发布于 2014-03-29 10:52:34

我不知道lucene,但是这个正则表达式可以工作:

代码语言:javascript
复制
'\d{3}[ \-]\d{2}[ \-]\d{4}'

它同时匹配以下两项:

222 33 4444222-33-4444

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22726165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档