2011-12-15 68 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)