在字符串中

my_string = 'abcd (ef gh ) ij'

只有当空格出现在括号内时,我才需要删除它们,结果是:
my_clean_string = 'abcd (efgh) ij'

这个post建议如何通过re.sub(r'\([^)]*\)', '', my_string)完全删除所有括号文本,但是我不知道如何指定只应将删除应用于空格' '
是否有一个regexpr(或简单的python)解决方案可以在不明确循环每个字符的情况下完成此任务?

最佳答案

下面是一种对嵌套括号也有效的通用方法:

In [27]: my_string = 'abcd (  ()e(e w  )f ) gh'

In [28]: re.sub(r' \(\s+|\s+\)', lambda x: x.group().strip(), my_string)
Out[28]: 'abcd(()e(e w)f) gh'

如果要删除单词之间的空格,则可以使用look-arounds;-):
In [40]: my_string = 'abcd (  ()e(e w  )f ) gh'

In [41]: re.sub(r'\s+(?=[^[\(]*\))|((?<=\()\s+)', '', my_string)
Out[41]: 'abcd (()e(ew)f) gh'

10-06 02:08