2017-04-22 72 views
0

我正在尝试查找此特定产品代码的REGEX。如何从REGEX中的字符串中排除2个字母字符

描述:

  1. 一个有效的产品代码必须通过的两位数字一个一个开始。
  2. 数不能与0
  3. 开始数必须跟着一个连字号 -
  4. 连字符后面跟着大写的序列 字母符合图案AAA BBB和
  5. AAA:的除了“I”和“O”的任意三个大写字母字符串
  6. 的范围 “A”的任意三个大写字母字符
  7. BBB字符串为“d”

实例:

  • N-二AAA

  • NN-AAA

  • NN-BBB

  • NN-AAABBB

我的问题是与点5)予提及。我的解决方案迄今:

^[1-9] [0-9] - [AZ] [^ IO] {3} [AD] {3} $

我不?确定我在RE中突出显示的部分。我期待知道我的解决方案是否正确,如果不正确,我想知道答案和背后的推理。

感谢,

+0

这是不正确的,因为'[^ IO]'匹配任何* *字符,但'I'和'O'。另外,为什么你添加了“{#}”?如果你在数字后面加一个连字符,为什么要用'.'?那么'AAA'和'BBB'每个都是3个字母的序列呢?那么,你的要求并不明确。试试['^ [1-9] [0-9]? - (?:(?![IO])[AZ]){3}(?:[AD] {3})?$' //regex101.com/r/lhJAgI/1)。 –

+0

你使用flex吗? (或者,为什么要标记这个问题[编译器构造]?)另外,你的例子似乎表明这个数字可以跟随AAA或者BBB或者两者。但这不是你的描述所说的。 – rici

+0

您使用哪种编程语言? –

回答

0

你必须使用负先行(?!([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

+0

感谢您的回答。因为它可以是AAA或AAABBB或BBB,我猜想^ [1-9] {1} [0-9] + \ - (?!([I] | [O]))[AZ] {3}?[ AD] {3}?我们应该添加“?”太对了?我认为你的表情在连字符之后强制6个字符。纠正我,如果我错了 –

+0

我不知道我明白你为什么使用“|”而不是使用“?”正如我在之前的评论中提到的那样。我将不胜感激解释!谢谢:) –

+0

我已经使用'I'作为'或'。 “AAABBB”或“AAA”或“BBB”。 “{3}?”和“{3}”都匹配三次。 – csharpbd

相关问题