我有一排格式无效的分析树,其中的单词用括号括起来。
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))))))
答案 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))))))