Python正则表达式必须去除引号外的空白字符
我需要一种方法来去掉字符串中的所有空白字符,但要保留那些在引号之间的空白。
result = re.sub('".*?"', "", content)
这个方法可以找到引号之间的内容,但现在需要让它忽略这些内容,同时还要添加去掉空白的功能。
5 个回答
5
你可以使用shlex.split这个方法来进行分割,它会考虑到引号的情况。然后可以用" ".join把结果连接起来。比如:
print " ".join(shlex.split('Hello "world this is" a test'))
6
这里有一个一行代码的写法,灵感来自@kindall的想法——而且它完全不使用正则表达式!首先用逗号分开,然后对每个其他的项目进行分割,再把它们重新连接起来,这样就处理好了空格的问题:
stripWS = lambda txt:'"'.join( it if i%2 else ''.join(it.split())
for i,it in enumerate(txt.split('"')) )
使用示例:
>>> stripWS('This is a string with some "text in quotes."')
'Thisisastringwithsome"text in quotes."'
7
我觉得你可能无法仅用一个正则表达式来做到这一点。有一种方法是先把字符串按照引号分开,然后对结果列表中的每个其他项应用去除空格的正则表达式,最后再把这些项重新连接起来。
import re
def stripwhite(text):
lst = text.split('"')
for i, item in enumerate(lst):
if not i % 2:
lst[i] = re.sub("\s+", "", item)
return '"'.join(lst)
print stripwhite('This is a string with some "text in quotes."')