在字符串
中my_string = 'abcd (ef gh ) ij'
我只有当它们出现在括号内时才需要删除空格,结果是:
my_clean_string = 'abcd (efgh) ij'
此post建议如何通过re.sub(r'\([^)]*\)', '', my_string)
完全删除所有括号文字,但我不知道如何指定删除只应用于空格' '
。
是否有一个regexpr(或简单的python)解决方案,可以在不明确循环每个字符的情况下执行此操作?
答案 0 :(得分:2)
以下是一种适用于嵌套括号的通用方法:
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'
答案 1 :(得分:1)
这将删除括号内的单词前后的空格。
import re
my_string = 'abcd ( ef dfg dfg ) gh'
print re.sub('\(\s*(.*?)\s*\)', lambda x: ''.join(x.group().split()), my_string, re.DOTALL)
输出:
abcd (efdfgdfg) gh
答案 2 :(得分:0)
不使用正则表达式的解决方案,
my_string = 'abcd (ef ) gh'
str_to_replace = my_string[my_string.find('(')+1:my_string.find(')')]
out = my_string.replace(str_to_replace,str_to_replace.replace(' ',''))
结果
abcd(ef)gh
答案 3 :(得分:0)
与此post相关联,
re.sub("\\s+(?=[^()]*\\))", "", my_string)