2011-12-15 114 views
15

C#正則表達式匹配任何我想匹配括號內任何東西,但結果必須排除括號爲好。括號內

實例:
初始化(P90W)
制動(45X)

結果:
990W
45X

音符結果沒有括號。

我一直在努力使這項工作,但無濟於事我嘗試了一些變化,但我知道這是我缺少一個簡單的事情,我不想使用替換來實現它去。

var item = "Brake(45X)" 
Regex searchTerm = new Regex(@"\((.*)\)"); 
var value = (searchTerm.Match(item).Groups.Count > 0) ? 
    searchTerm.Match(item).Groups[0].Value : string.Empty; 
+0

我不知道C#,但它是一個新的`正則表達式()`假設爲基礎,擴展或PREG?你有沒有嘗試切換哪一組括號用反斜槓轉義?也許'\('的意思是「範圍標記開始」和`(`是字面括號? – ghoti 2011-12-15 20:36:25

+0

這看起來好像沒什麼問題,發生了什麼?'value`是`string.Empty`? – 2011-12-15 20:37:02

+0

值返回(P90W)或(45X)用括號 – 2011-12-15 20:38:39

回答

27

有人指責我利用零個寬度斷言所有的時間:

resultString = Regex.Match(subjectString, @"(?<=\().+?(?=\))").Value; 

但他們做的正是你想要的。不要捕捉你不想捕捉的東西。

0
Regex searchTerm = new Regex(@"\(([^\)]*)\)"); 
10

試正則表達式@"\((.*?)\)"

編輯:另外,結果將是組1不爲0,組0應包含整個正則表達式的結果,而不是第一個括號值

+0

有用的,我需要找大括號內的所有字符串部分,所以用這個簡單的代碼: 串模式= @「{(*?)}」; MatchCollection匹配= Regex.Matches(!文字,圖案); – Pisu 2013-07-17 09:26:45

3

取出內paranthesis並再試一次:

new Regex(@"(\([^\)]+\))"); 

當你不逃離paranthesi s在正則表達式中,如果你使用組匹配,它將只返回palent中的內容。所以如果你有,new Regex(@'(a)(b))',比賽1將是一個和比賽2將是B.比賽0是整場比賽。

0

試試這個:

var pattern = @".*public.*(.*\(.*\))"; 
Regex.Matches(input,pattern)