【问题标题】:How to remove text between multiple pairs of brackets?如何删除多对括号之间的文本?
【发布时间】:2017-02-25 18:46:28
【问题描述】:

我想删除多对括号之间的文本。如果字符串中只有一对括号,则下面的代码可以正常工作:

var text = "This (remove me) works fine!";

// Remove text between brackets.
text = Regex.Replace(text, @"\(.*\)", "");

// Remove extra spaces.
text = Regex.Replace(text, @"\s+", " ");

Console.WriteLine(text);

这很好用!

但是,如果字符串中包含多组括号,则会删除太多文本。 Regex 表达式删除 FIRST 左括号和 LAST 右括号之间的所有文本。

var text = "This is (remove me) not (remove me) a problem!";

// Remove text between brackets.
text = Regex.Replace(text, @"\(.*\)", "");

// Remove extra spaces.
text = Regex.Replace(text, @"\s+", " ");

Console.WriteLine(text);

这是个问题!

我很难过 - 我确信有一个简单的解决方案,但我没有想法......

欢迎帮助!

【问题讨论】:

  • 尝试.*? 而不是.* - 即尽可能少的macth
  • 另一种可能性是将.* 更改为[^)]* - 除右括号外的任何符号。
  • 天才——您的第一个解决方案完美运行!

标签: c# regex


【解决方案1】:

你有两种主要的可能性:

  • .* 更改为.*?,即匹配尽可能少,从而尽可能尽早匹配)

    text = Regex.Replace(text, @"\(.*?\)", "");
    text = Regex.Replace(text, @"\s{2,}", " "); // let's exclude trivial replaces 
    
  • .* 更改为[^)]*,即匹配以外的任何符号)

    text = Regex.Replace(text, @"\([^)]*\)", "");
    text = Regex.Replace(text, @"\s{2,}", " ");
    

【讨论】:

    【解决方案2】:

    c# 中的工作示例,这将处理花括号“{”,因此结果将是.. {{pc_mem_kc}}

    string str = "{{pc_mem_kc}}   of members were health (test message)";
    var pattern = @"\{.*?\}}";
    var data11 = Regex.Matches(str, pattern, RegexOptions.IgnoreCase);
    

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 1970-01-01
      • 2018-03-05
      • 2018-12-19
      • 2014-07-20
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多