regex - 包含至少两个数字/字母的序列的 Python 正则表达式

使用 Python 模块 re,我想检测文本中至少包含两个字母 (A-Z) 和至少两个数字 (0-9) 的序列,例如,来自文本

“N03FZ467 其他文字 N03671”

恰好应该匹配子字符串“N03FZ467”。

到目前为止我得到的最好的是

(?=[A-Z]*\d)[A-Z0-9]{4,}

检测长度至少为 4 且仅包含字母 A-Z 和数字 0-9 以及至少一位数字和一个字母的序列。 我怎样才能确保我分别得到至少两个?

最佳答案

  1. 如果要匹配完整单词,请从 word boundaries 开始匹配\b
  2. 通过 lookahead 检查第一个条件(两个上) : (?=(?:\d*[A-Z]){2})
  3. 如果成功,匹配第二个要求,两个digits : (?:[A-Z]*\d){2}
  4. 最后匹配所有剩余的 [A-Z\d]* 直到另一个 \b

综合:

\b(?=(?:\d*[A-Z]){2})(?:[A-Z]*\d){2}[A-Z\d]*\b

See this demo at regex101或 Python demo at tio.run

请注意,前瞻是零长度断言,它不消耗字符。如果您没有指定起点,例如 \b,则将在任何效率较低的地方使用先行。
进一步说明,最小长度至少为4个即可满足要求。

https://stackoverflow.com/questions/73915958/

相关文章:

Python - 如何删除以数字开头并包含句点的单词

go - gcloud 函数部署 go 运行时错误 "undefined: unsafe.Slice

haskell - 我可以在 Haskell 中将数字全局限制为只有 3 位小数吗?

rust - Rust 中的一个可变借用或多个不可变借用……为什么?

rust - -1 和 pow 的特殊行为

regex - 为什么 Perl 正则表达式不匹配 "\n"和后面的字符?

c++ - 如何在始终选择第一个元素并过滤其余元素的范围内创建 View ?

python - 在代表 python 中大文件的大字符串上加速 re.sub()?

c++ - 我可以继承 std::array 并重载 operator [] 吗?

bash - 使用 sed 删除算术形式