如何解决Lucene正则表达式用于字母数字匹配,但不是全部数字
我想在lucene自动机正则表达式中找到字母数字单词,但不完全是数字,甚至不完全是字母。 我尝试过
(([a-zA-Z0-9]{1,10})&(.*[0-9].*))
但是这也会返回所有数字词 所以我试着否定所有像下面这样的数字,但是它不起作用
(^[0-9])(([a-zA-Z0-9]{1,10})&(.*[0-9].*))
输入字符串:
- DL200,dal2,700091
预期输出: DL200和dal2
但它不应返回700091
解决方法
对lucene regex风味了解不多,但是一些研究使我坚信它不支持PCRE
库,但是支持一些标准运算符。我发现它不包含环顾四周 nor 字边界。看看docs。
无论哪种方式,为了克服对环视功能缺乏支持的问题,我查看了this个较旧的SO帖子,改而使用~
。此外,我看到您可以使用&
运算符检查字符串是否匹配 多个 模式。
基于这种假设,以下模式可能对您有用:
~[0-9]+&~[^0-9]+&[A-Za-z0-9]{2,10}
-
~[0-9]+
-否定仅由数字组成的字符串。 -
&
-
~[^0-9]+
-否定仅由非数字组成的字符串。 -
&
-
[A-Za-z0-9]{2,10}
-匹配由2到10个字母数字字符组成的字符串。
借助JvdV
的答案和https://stackoverflow.com/a/38665819/9758194的帮助,我能够获得所需的输出
(([a-zA-Z0-9]{1,10})&(.*[0-9].*))&~([0-9]*)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。