如何去除字符串多余空白,仅保留{}与""内的空白?
解决方案:保留指定区域内的空白并删除其余空白
需求1:仅保留{}内部的空白
输入
" word= {his or her} whatever "
目标输出
"word={his or her}whatever"
实现代码
import re input_str = " word= {his or her} whatever " output_str = re.sub(r'\s+(?![^{]*})', '', input_str) print(output_str)
正则解释
\s+:匹配一个或多个空白字符(空格、制表符等)(?![^{]*}):负向预查,用来排除{}内部的空白。意思是:如果当前空白的后面,在遇到}之前没有出现{,就不匹配这个空白——换句话说,只有空白不在{}包裹的区域内时,才会被匹配并删除。
需求2:同时保留{}和""内部的空白
输入
" word= {his or her} and "his or her" whatever "
目标输出
"word={his or her}and"his or her"whatever"
修改后的正则及代码
import re input_str = ' word= {his or her} and "his or her" whatever ' output_str = re.sub(r'\s+(?![^{]*})(?![^"]*"(?![^"]*"))', '', input_str) print(output_str)
正则解释
在原有正则基础上,新增了(?![^"]*"(?![^"]*"))这个负向预查,用来排除""内部的空白:
- 这个预查的逻辑是:如果当前空白的后面,先出现一个
",且这个"之后没有对应的闭合",就不匹配这个空白——也就是仅当空白不在一对""包裹的区域内时,才会被匹配并删除。 - 两个预查条件同时生效,就能同时保留
{}和""内部的空白,删除其他所有空白。
内容的提问来源于stack exchange,提问作者BlueInundation
相关产品推荐
相关产品推荐

