我很难弄清楚如何用''
替换每个空白区域,在" "
之间发挥作用。
例如 -
a = c + d;
是
a=c+d
和
foo ("hi bye", "bye hi");
是
foo("hi bye","bye hi");
我尝试了类似
的内容re.sub('^(\"[^\"\n]*\")|\s|\\n', '', line)
但显然不起作用。
答案 0 :(得分:4)
查找
r'(".*?")|(\s+)'
替换:
r'\1'
我们的想法是忽略引号内的所有字符,首先将所有引号与内部(".*?"
)匹配并替换为相同的\1
)。
我们知道左边的空格(\s+
)不会在引号内(或者第一个规则会匹配它们)并用空格替换这些空格。
答案 1 :(得分:1)
由于您在评论中说不需要正则表达式,我将提出一个新概念:不要使用正则表达式。
别误会我的意思。我喜欢正则表达式。它是一个了不起的强大工具,如果你愿意做出足够复杂的表达,它几乎可以处理你提出的任何问题。有时候正则表达式是一个完美的工具,并在一个简单的表达式中清理了几十行代码。
但这是一项简单的任务,取决于一个简单的事情:你需要一个状态,你是否在引用范围内。
这段代码是如此基本,人们甚至可能会说它不是pythonic。但它有效,任何人都可以阅读它。
def kill_spaces(test_str):
inside_quote = False
result = ""
for character in test_str:
if character != " " or inside_quote:
result += character
if character == '"':
inside_quote = not inside_quote
return result
test = 'foo ("hi bye", "bye hi");'
kill_spaces(test)
>>> 'foo("hi bye","bye hi");'