如何删除特定分隔符*内的字符串*中的特定字符,例如在括号内

时间:2017-01-14 12:41:32

标签: python regex python-2.7 python-3.x

在字符串

my_string = 'abcd (ef gh ) ij'

我只有当它们出现在括号内时才需要删除空格,结果是:

my_clean_string = 'abcd (efgh) ij'

post建议如何通过re.sub(r'\([^)]*\)', '', my_string)完全删除所有括号文字,但我不知道如何指定删除只应用于空格' '

是否有一个regexpr(或简单的python)解决方案,可以在不明确循环每个字符的情况下执行此操作?

4 个答案:

答案 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)