Python正则表达式必须删除除引号之外的空格

Oli*_*Oli 5 python regex

我需要一种方法从字符串中删除所有空格,除非该空格在引号之间.

result = re.sub('".*?"', "", content)
Run Code Online (Sandbox Code Playgroud)

这将匹配引号之间的任何内容,但现在需要忽略该匹配并为空格添加匹配项.

kin*_*all 6

我不认为你能用一个正则表达式做到这一点.做到这一点的方法之一是分割字符串的报价,应用空格剥离的正则表达式的结果列表中的所有其他项目,然后重新加入该列表.

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."')
Run Code Online (Sandbox Code Playgroud)


Nas*_*nov 6

这是一个单行版本,基于@ kindall的想法 - 但它根本不使用正则表达式!首先拆分",然后拆分()每隔一个项目并重新加入它们,它们会处理空白:

stripWS = lambda txt:'"'.join( it if i%2 else ''.join(it.split())
    for i,it in enumerate(txt.split('"'))  )
Run Code Online (Sandbox Code Playgroud)

用法示例:

>>> stripWS('This is a string with some "text in quotes."')
'Thisisastringwithsome"text in quotes."'
Run Code Online (Sandbox Code Playgroud)


Ivo*_*ijk 5

您可以使用shlex.split进行报价分析,并使用“” .join连接结果。例如

print " ".join(shlex.split('Hello "world     this    is" a    test'))
Run Code Online (Sandbox Code Playgroud)