如何从 REGEX 中的字符串中排除 2 个字母字符

How to exclude 2 alphabetic character from a string in REGEX

我正在尝试查找此特定产品代码的正则表达式。

描述:

  1. 有效的产品代码必须以两位数字之一开头。
  2. 号码不能以0开头
  3. 数字后面必须跟一个连字符 -
  4. 连字符后跟一系列大写字母 字母符合模式 AAA 和 BBB
  5. AAA:除"I"和"O"之外的任意三个大写字母字符的字符串
  6. 范围内任意三个大写字母字符的 BBB 字符串 "A" 到 "D"

示例:

我的问题是我提到的第 5) 点。到目前为止我的解决方案是:

^[1-9]?[0-9]-[A-Z][^IO]{3}?[A-D]{3}$

我不确定我在 RE 中突出显示的部分。我想知道我的解决方案是否正确,如果不正确,我想知道答案及其背后的原因。

谢谢,

您必须在正则表达式中使用 Negative Lookahead (?!([I]|[O]))。请检查:

^[1-9]{1}[0-9]+\-(?!([I]|[O]))[A-Z]{3}[A-D]{3}

旧更新:

^[1-9]{1}[0-9]+\-((?!([I]|[O]))[A-Z]{3}[A-D]{3}|(?!([I]|[O]))[A-Z]{3}|[A-D]{3})

更新的正则表达式:

^[1-9]{1}(|[0-9])\-([A-HJ-NP-Z]{3}[A-D]{3}|[A-HJ-NP-Z]{3}|[A-D]{3})

^[1-9]{1} 从 1 到 9 开始

(|[0-9]) N 或 NN

\- 连字符 (-)

[A-HJ-NP-Z] 避免 IO

([A-HJ-NP-Z]{3}[A-D]{3}|[A-HJ-NP-Z]{3}|[A-D]{3}) AAABBB 或 AAA 或 BBB

您可以在Regex101中查看。

查看我在 Regex 中的最后更新。

您可以使用类似的东西:

^[1-9]\d?-(?:[A-HJ-NP-Z]{3}(?:[A-D]{3})?|(?:[A-D]{3}))$

Regex Explanation and Demo