c#条件正则表达式字符串匹配

Joe*_*tch 0 c# regex

我正在尝试使用c#Regular Expression来匹配特定的字符串,但我无法弄清楚如何做到这一点.任何帮助表示赞赏.

我想要匹配的字符串如下所示,其中A是大写字母字符,X是大写字母数字字符,#是0,1或2.

AA-#-XX-X-XXX-XXXXXXX-XXXXXXXX

所以以下任何一个都匹配上面的字符串.

XY-1

MM-0-AB

MM-0-AB-1-ABC-1234567

VV-2-XX-7-CCC-ABCDEFG-12345678

以下任何一种都不匹配.

QQ-7-AA (第二级只允许0,1,2.)

QQ-2-XX-7-CC (该级别的部分字符.)

QQ-2-XX-7-CCC-ABCDEFG- (不能以短划线结束.)

QQ-2-XX-7-CCC-ABCDEFG-123456 (该级别的部分字符.)

到目前为止(真的不是那么远)我有匹配的模式@"^[A-Z]{2}",但我不确定如何有条件地匹配(我甚至不确定条件是否正确使用)字符串的其余部分,但仅限于它在那儿.我需要为此写出7种不同的陈述吗?似乎不合理,但我可能是错的.

dtb*_*dtb 9

看看正则表达式语言.您需要以下元素:

  • 大写字母字符: [A-Z]
  • 大写字母数字字符: [A-Z0-9]
  • 0,1或2: [0-2]
  • 短跑: -

  • 匹配x正好n次:x{n}

  • 匹配x零或一次:x?
  • 定义子表达式:(...)

例子:

  • 两个大写字母字符: [A-Z]{2}
  • 两个大写字母字符,后跟一个破折号: [A-Z]{2}-
  • 两个大写字母字符,后跟一个破折号,后跟0,1或2: [A-Z]{2}-[0-2]
  • 两个大写字母字符,后跟一个破折号,后跟0,1或2,但子表达式由短划线组成,0,1或2出现零次或一次:
    [A-Z]{2}(-[0-2])?
  • 等等...

结果表达式:

^[A-Z]{2}(-[0-2](-[A-Z0-9]{2}(-[A-Z0-9](-[A-Z0-9]{3}(-[A-Z0-9]{7}(-[A-Z0-9]{8})?)?)?)?)?)?$
Run Code Online (Sandbox Code Playgroud)