1

我是正则表达式的新手。我有一个小问题,我找不到答案。我正在使用此常规 espression 寻找多余的括号:

public Regex RedundantBrackets = new Regex("[(](\\s?)[a-z](\\s?)[)]");

当我发现我想以这种方式修改字符串时:

text1 (text2) text3 => text1 text2 text3 - 所以你可以看到我只想删除括号。我怎样才能做到这一点?我试图使用 Replace 方法,但使用它我只能替换"(text2)".

提前致谢!

4

3 回答 3

1

试试这个替换

Regex.Replace("text1 (text2) text3", // Input
              @"([()])",             // Pattern to match
              string.Empty)          // Item to replace

/* result: text1 text2 text3*/

解释

正则表达式替换在整个字符串中查找匹配项。如果找到匹配项,它将替换该项目。所以我们的匹配模式看起来像这样([()])。这意味着

  1. (是模式中开始匹配所需的内容,需要关闭,)否则匹配模式不平衡。
  2. []在模式中说,我正在寻找一个字符,[]定义一个集合。它们被认为是固定匹配。最常见的是 [AZ],它是任何字符集,以 A 开头并以 Z 结尾。我们将定义自己的集合。*请记住 [ 和 ] 表示正则表达式我们正在寻找1 个字符,但我们在其中指定了一组许多字符。
  3. (在我们的)集合[()] 中也可以指定,[)(]意味着我们有一组两个字符。这两个字符是左括号和右括号()

因此,综上所述,我们希望匹配 (1) 集合 (2) 中的任何字符,即 a ( 或 a )。找到该匹配项后,将 ( 或 ) 替换为 string.empty。

当我们对您的文本运行正则表达式替换时,它会发现两个匹配(text2 和最后匹配 text2 )。那些被替换为 string.empty。

于 2013-10-25T20:44:23.880 回答
0

首先,使用逐字字符串很方便,因此您不必转义斜杠等。

public Regex RedundantBrackets = new Regex(@"[(]\s?([a-z]+)\s?[)]");

我们想[a-z]用括号括起来,因为这就是我们要捕获的内容。然后我们可以使用$1将该捕获放入替换中

RedundantBrackets.Replace("text (text) text", "$1");

编辑:我忘了添加重复[a-z]=>[a-z]+

于 2013-10-25T20:45:23.527 回答
0

这将使用正则表达式删除所有字符

finalString = Regex.Replace(finalString, @"[^\w ]", "");

于 2013-10-25T20:53:48.450 回答