2012-05-21 36 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」,但包含太多字符。 –

相關問題