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

时间:2012-05-21 21:32:24

标签: 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种不同的陈述吗?似乎不合理,但我可能是错的。

1 个答案:

答案 0 :(得分:9)

查看Regular Expression Language。您需要以下元素:

  • 大写字母字符:[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})?)?)?)?)?)?$