Удалить только круглые скобки во вложенных скобках - PullRequest
2 голосов
/ 20 марта 2019

У меня есть банк дерева разбора с неверным форматом, в котором слова заключены в скобки.

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 Ответ

2 голосов
/ 20 марта 2019

Вы можете использовать

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

См. Демоверсию regex .

Детали

  • \( - ( char
  • ([^()]*) - Группа 1 (\1 относится к значению этой группы из шаблона замены): 0 или более символов, кроме скобок
  • \) -

См. Демоверсию Python :

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