Lucene Regex 用于字母数字匹配但不是所有数字

Lucene Regex for alphanumeric match but not all numeric

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

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

但是这个returns也都是数字词 所以我试图否定下面的所有数字,但它不起作用

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

输入字符串:

  1. DL200, dal2, 700091

预期输出: DL200 和 dal2

但不应该 return 700091

不太了解 lucene 正则表达式风格,但一些研究让我了解到它 支持 PCRE 库,但是支持一些标准运算符。我发现它不包括 lookarounds nor 字边界。看看 docs.

无论哪种方式,为了克服环顾四周缺乏支持的问题,我查看了 较旧的 SO post 以改用 ~。此外,我看到您可以使用 & 运算符来检查字符串是否匹配 multiple patterns.

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

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

JvdV 答案的帮助下和 的帮助下,我能够获得所需的输出

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