【问题标题】:Lucene Regex for alphanumeric match but not all numericLucene Regex 用于字母数字匹配,但不是所有数字
【发布时间】:2021-01-21 00:25:44
【问题描述】:

我想在 lucene 自动机正则表达式中找到字母数字单词,但不完全是数字,甚至不完全是字母。 我试过了

(([a-zA-Z0-9]{1,10})&(.*[0-9].*))

但这也会返回所有数字单词 所以我试图否定下面的所有数字,但它不起作用

(^[0-9])(([a-zA-Z0-9]{1,10})&(.*[0-9].*))

输入字符串:

  1. DL200, dal2 , 700091

预期输出: DL200和dal2

但它不应该返回 700091

【问题讨论】:

  • 您能否提供一些输入和输出示例?
  • @ChristianBaumann 我添加了输入和输出
  • 总是非数字后跟数字?
  • 不...可以是任何顺序

标签: regex elasticsearch lucene


【解决方案1】:

JvdV 答案和https://stackoverflow.com/a/38665819/9758194 的帮助下,我能够获得所需的输出

(([a-zA-Z0-9]{1,10})&(.*[0-9].*))&~([0-9]*)

【讨论】:

    【解决方案2】:

    对 lucene 正则表达式风格了解不多,但经过一些研究发现它确实支持 PCRE 库,但支持一些标准运算符。我发现它不包括lookarounds 也不字边界。看看docs

    无论哪种方式,为了克服缺乏对环视的支持,我查看了 this 较旧的 SO 帖子以改用 ~。此外,我看到您可以使用 & 运算符来检查字符串是否与 multiple 模式匹配。

    假设以下模式可能适合您:

    ~[0-9]+&~[^0-9]+&[A-Za-z0-9]{2,10}
    
    • ~[0-9]+ - 否定仅由数字组成的字符串。
    • &
    • ~[^0-9]+ - 否定仅由非数字组成的字符串。
    • &
    • [A-Za-z0-9]{2,10} - 匹配由 2 到 10 个字母数字字符组成的字符串。

    【讨论】:

    • 您的回答有帮助。我用我使用的正则表达式添加了答案
    • @happy,你去吧。不错的答案。我错过了您也想避免使用完全按字母顺序排列的字符串。在这种情况下,也许~[0-9]+&~[^0-9]+&[A-Za-z0-9]{2,10} 有效?
    猜你喜欢
    • 2023-02-13
    • 2012-01-25
    • 2014-06-04
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2012-04-16
    相关资源
    最近更新 更多