【问题标题】:Regex to replace (void)正则表达式替换(无效)
【发布时间】:2015-01-22 04:08:34
【问题描述】:

我正在尝试用C# 中的空字符串"" 替换单词(void)(包括括号)。我尝试了以下表达式,但没有一个有效。

  • @"\b(void)\b"
  • @"\b((void))\b"
  • @"(void)"

前两个完全删除了单词void,但括号仍然存在,而另一个不起作用。
我也尝试过@"\b(+\w+)",但效果不佳。

【问题讨论】:

  • () 表示捕获,特殊构造也是如此。要明确捕获它们,请在 \(\) 等正则表达式中转义它们。 \(void\)应该做你想做的事

标签: c# regex


【解决方案1】:

括号需要转义,否则会被当作捕获组处理

\(void\)

Live demo

【讨论】:

  • 太棒了!非常感谢
【解决方案2】:

虽然正则表达式确实可以做到这一点,但还是有点矫枉过正。您只需执行以下操作即可完成:

var input = "What (void) happened?";    
var example = Regex.Replace(input, @"\(void\)", "");

您可以轻松地执行以下代码:

var input = "What (void) happened?";
var example = input.Replace("(void)", " ");

这两个例子都在 Fiddle 上工作。请记住,第二个示例不使用 正则表达式,这将产生比上述初始示例更高的性能。

更新: 意识到 () 已包含在内,您需要使用反斜杠 \ 转义括号,以便使用 正则表达式 正确删除。 String.Replace 虽然不需要转义括号。

【讨论】:

    【解决方案3】:

    你可以使用regex recursion,像这样:

    (([^()]|(?R))*)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多