Python 删除内括号并保留外括号

Python remove inner brackets and keep outer brackets

我正在为 Regex 苦苦挣扎,我已经阅读了 wiki 并尝试了一下,但我似乎无法做出正确的匹配。

string_before = 'President [Trump] first name is [Donald], so his full name is [[Donald] [Trump]]' 
string_after = 'President [Trump] first name is [Donald], so his full name is [Donald Trump]' 

我想删除外括号内的任何可能的括号,同时保留外括号和里面的文本。

在 python 中没有正则表达式可以轻松解决这个问题吗?

对于此类问题,正则表达式弊大于利。您将需要根据语法或规则编写一些解析逻辑。

例如,您可以查看 Finite-State Transducers (1, 2),这将是解析嵌套结构的合适方法,但它比 Regex 更难理解和使用。

In [1]: import re
In [2]: before='blablabla [[Donald] [Trump]] blablabla'
In [3]: l=before.find('[')+1
In [4]: r=before.rfind(']')
In [5]: before[:l] + re.sub( r'[][]','',before[l:r]) + before[r:]
Out[5]: 'blablabla [Donald Trump] blablabla'

只显示一种方法,省略了错误 checking/handling。

在一对括号内的两个相邻括号表达式的特定情况下,您可以这样做

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

这不能方便地扩展到任意数量的相邻括号表达式,但也许足以满足您的需要。