2012-05-21 39 views
0

我想用c#正则表达式来匹配一个特定的字符串,但我无法弄清楚如何去做。任何帮助表示赞赏。c#有条件的正则表达式字符串匹配

,我试图匹配是如下,其中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个不同的语句?似乎不合理,但我可能是错的。

回答

9

看一看Regular Expression Language。您需要以下元件:

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

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

  • 比赛X零次或一次:x?
  • 定义子表达式:( ...)

实例:

  • 2大写字母字符:[A-Z]{2}
  • 2大写字母字符,接着是破折号:[A-Z]{2}-
  • 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})?)?)?)?)?)?$ 
+0

+1对于非常完整的答案。 – devstruck

+0

我自己太亲近了,但是你打败了我。好的和很好解释的答案! +1 –

+0

我也太慢了。我认为有一种方法可以缩短A-Z0-9(如0-9使用“\ d”),但我无法找到它。最近我得到的是“\ w”,但包含太多字符。 –

相关问题