Python正则表达式必须去除引号外的空白字符

6 投票
5 回答
4769 浏览
提问于 2025-04-16 03:32

我需要一种方法来去掉字符串中的所有空白字符,但要保留那些在引号之间的空白。

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."')

撰写回答