仅删除嵌套括号中的括号

Remove only parentheses in nested parentheses

我有一堆格式无效的解析树,其中的单词用括号括起来。

string = (NP  (NN  (Police)) (SBAR  (SC (for)) (S  (NP-SBJ  (*)) (VP  (VB (secure)) (NP  (NN      (olympic games)))))))

我试过去掉里面没有单词的括号,结果我把它们都去掉了。

re.sub(r'[\(\)]','',string)

这也行不通。

re.sub(r'\s\(.*\)\))

因为我认为基于第二个右括号的模式像

(Police)) (for)) (*)) (secure)) (olympic games))

我想删除单词两侧的括号,而不是像这样删除单词。有帮助吗?

result = (NP  (NN Police) (SBAR  (SC for) (S  (NP-SBJ  *) (VP  (VB secure) (NP  (NN  olympic games))))))

您可以使用

re.sub(r'\(([^()]*)\)', r'', s)

参见regex demo

详情

  • \( - 一个 ( 字符
  • ([^()]*) - 第 1 组(</code> 指的是替换模式中的该组值):除括号 </li> 之外的 0 个或更多字符 <li><code>\) -

Python demo

import re
s = "(NP  (NN  (Police)) (SBAR  (SC (for)) (S  (NP-SBJ  (*)) (VP  (VB (secure)) (NP  (NN      (olympic games)))))))"
print(re.sub(r'\(([^()]*)\)', r'', s))
# => (NP  (NN  Police) (SBAR  (SC for) (S  (NP-SBJ  *) (VP  (VB secure) (NP  (NN      olympic games))))))