正则表达式删除除大多数外部括号外的所有括号

时间:2019-02-15 12:01:18

标签: regex

我一直在尝试并没有运气地阅读许多类似的答案。 我需要在括号内的文本中删除括号,以保留文本。理想情况下使用1个正则表达式...或2个?

我的文字是:

  

Alpha(Bravo(Charlie))

我想要实现:

  

Alpha(Bravo Charlie)

到目前为止,我得到的最好成绩是:

\\(|\\)

但它得到了:

  

Alpha Bravo Charlie

3 个答案:

答案 0 :(得分:3)

您可以使用这样的正则表达式:

(\(.*?)\((.*?)\)

enter image description here

使用此替换字符串:

$1$2

Regex demo


更新:根据ııı条评论,由于我不知道您的完整示例文本,因此如果出现这种情况,我会提供此正则表达式

(\([^)]*)\((.*?)\)

Regex demo

答案 1 :(得分:1)

在您的帖子和评论中,您似乎只想删除最里面的括号,可以在其后使用以下正则表达式

\(([^()]*)\)

并根据您的语言替换为$1\1

在此正则表达式中,\(匹配起始括号,\)匹配结束括号,([^()]*)确保捕获的文本不包含(或{{1} }确保它是最里面的括号,并将捕获的文本放置在group1中,然后将整个匹配项替换为在group1文本中捕获的内容,从而摆脱了最里面的括号并将文本原样保留在里面。

Demo

答案 2 :(得分:1)

您的模式\(|\)使用交替字符,然后将匹配左括号或右括号。

如果根据注释,只有一对嵌套括号,则可以匹配:

(\([^()]*)\(([^()]*\)[^()]*)\)
  • (开始捕获群组
  • \(比赛开头括号
    • [^()]*匹配0+次,而不是()
  • )关闭第1组
  • \(匹配
  • (捕获组2
    • \([^()]*\)()的匹配
    • [^()]*匹配0+次,而不是()
  • )关闭捕获组
  • \)匹配右括号

并替换为第一个和第二个捕获组。

Regex demo