2015-07-10 189 views
1

我需要幫助生成正則表達式,使其將匹配具有以下詳細正確的任何字符串:c#正則表達式來匹配字符串的結尾?

  1. 字符串應該與它裏面支架和只有數字結束。
  2. 結束括號應該只在行尾出現一次,而不是在其他地方出現 。
  3. 任何字符托架之前允許開始
  4. 沒有字符托架結束之後被允許
  5. 字符串應該只包含1組括號以數字,即沒有雙括號狀((或))

我試過這.\([0-9]+\)$但這不是我所要求的。

例如:

以下字符串應該匹配:

asds-xyz (1) 
asds+-xyz (12) 
[email protected] (123) 

以下字符串不應該匹配:

asds-xyz ((1) 
asds-xyz ((12sdf)) 
(123) asds-xyz 
xyz ((2) 
XYX (1)) 
XYZ (1)(2) 
xyz(1)BXZ 
xyz(1)BXZ(2) 

回答

2
^[^\(\)]*\(\d+\)$ 

會做工作...

\d = [0-9]

+0

謝謝。它的測試字符串正常工作。否定團體是我錯過的 – Sandeep

1

我儘量以最小的變化,以您的方式來解決: 你必須使用[^鍵在您希望的括號之前排除方括號。這樣

[^\(\)]*\([0-9]+\)$ 

那會找到你喜歡的圖案,如果你喜歡整個字符串是這樣的,那麼只需要添加一個^在開始

+0

它XYZ(1)(2)','ASDS-XYZ((1)','XYZ((2)'和'XYZ(1)BXZ(匹配' 2)'但不應該。 –

+0

@Verarind no,w ith ^一開始就不會 – n00b

+0

測試一下!你的正則表達式在任何時候都不會包含'[^ \(\)]''''。任何可能都是零,這發生在所有指定的情況下。但是第二個事實是什麼呢,一個支撐杆會來到弦中的任何地方,但最後呢?你需要一個從開始就不應該被束縛的解決方案。但是這個ancor缺失。 –

0

從您的正則表達式開始:.\([0-9]+\)$ 。匹配一切,但你需要量化這一點。所以加*本 .*\([0-9]+\)$ 但問題是,它會匹配(和),如xyz ((2) 最後括號前那麼讓這個負面集,最後的結果是:

^(.*[^\(\)])(\([0-9]+\))$ 
+0

它匹配'xyz(1)BXZ(2)'但不應該。 –