仅删除嵌套括号中的括号

时间:2019-03-20 14:12:50

标签: python regex parentheses parse-tree

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

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))))))

1 个答案:

答案 0 :(得分:2)

您可以使用

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

请参见regex demo

详细信息

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

请参见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'\1', s))
# => (NP  (NN  Police) (SBAR  (SC for) (S  (NP-SBJ  *) (VP  (VB secure) (NP  (NN      olympic games))))))