【问题标题】:C# Regex match anything inside ParenthesesC# 正则表达式匹配括号内的任何内容
【发布时间】:2012-01-21 12:14:59
【问题描述】:

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

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

结果:
990W
45倍

注意不带括号的结果。

我一直在尝试完成这项工作,但无济于事,我尝试了一些变体,但我知道这是我缺少的一件简单的事情,我不想使用 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;

【问题讨论】:

  • 我不懂 C#,但 new Regex() 是否假定为 Basic、Extended 或 PREG?您是否尝试过用反斜杠切换哪一组括号?也许\( 的意思是“标记范围的开始”而( 是文字括号?
  • 这对我来说看起来不错,发生了什么? valuestring.Empty?
  • 值返回 (P90W) 或 (45X) 并带有括号。

标签: c# regex parentheses


【解决方案1】:

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

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

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

【讨论】:

  • 为什么需要前瞻和后瞻? @"\(([^\)]*)\)" 更简单,并且短了 4 个字符:)
  • 这很好,kol 的评论也很棒,但我会说 FailedDev 的回答教会了我做一些我以前不知道的事情
  • 10 年后,但使用 @kol 的评论,您需要使用 Regex.Match(...).Groups[1],而 @FailedDev 的答案并非如此
【解决方案2】:

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

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

【讨论】:

  • 有用!我需要在大括号内找到所有字符串部分,所以使用了这个简单的代码:string pattern = @"{(.*?)}"; MatchCollection 匹配 = Regex.Matches(text, pattern);
【解决方案3】:

去掉内括号再试一次:

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

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

【讨论】:

  • 一个注释,如果你想要太空的括号:(([^)]*))
【解决方案4】:
Regex searchTerm = new Regex(@"\(([^\)]*)\)");

【讨论】:

    【解决方案5】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多