20

我想匹配括号内的任何内容,但结果也必须排除括号。

示例:
初始化(P90W)
刹车(45X)

结果:
990W
45X

注意没有括号的结果。

我一直在尝试完成这项工作,但无济于事,我尝试了一些变化,但我知道这是我缺少的一件简单的事情,我不想使用 Replace 来实现它。

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

5 回答 5

40

有人指责我一直使用零宽度断言:

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

但他们完全按照您的意愿行事。不要捕捉你不想捕捉的东西。

于 2011-12-15T20:38:15.337 回答
12

尝试正则表达式@"\((.*?)\)"

编辑:结果也将是组 1 而不是 0,组 0 应该包含整个正则表达式结果,而不是第一个带括号的值

于 2011-12-15T20:35:25.007 回答
3

删除内部括号并重试:

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

当您不在正则表达式中转义括号时,如果您使用组匹配,它将仅返回括号内的内容。因此,如果您有 ,则new Regex(@'(a)(b))'匹配 1 将是 a,匹配 2 将是 b。比赛 0 是整个比赛。

于 2011-12-15T20:35:55.790 回答
0
Regex searchTerm = new Regex(@"\(([^\)]*)\)");
于 2011-12-15T20:35:19.027 回答
0

试试这个:

var pattern = @".*public.*(.*\(.*\))";
Regex.Matches(input,pattern)
于 2015-08-05T21:40:18.643 回答