正则表达式和删除符号

本文关键字:符号 删除 正则表达式 | 更新日期: 2023-09-27 18:36:58

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

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

当我找到我想以这种方式修改字符串的内容时:

text1 (text2) text3 => text1 text2 text3 - 所以你可以 se 我只想删除括号。我该怎么做?我试图使用替换方法,但使用它我只能替换"(text2)"的每一个迹象。

提前感谢!

正则表达式和删除符号

试试这个替换

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

解释

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

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

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

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

首先,使用逐字字符串可能很方便,这样您就不必转义斜杠等。

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

我们希望将[a-z]括在括号中,因为这是我们试图捕获的内容。然后,我们可以使用该$1将捕获放入替换中

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

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

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

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