Python Regex-替换特定的字符EXPEPT特定的字符串
我很难弄清楚如何用Python Regex-替换特定的字符EXPEPT特定的字符串,python,regex,Python,Regex,我很难弄清楚如何用“”替换每个空格,除了”之间的千个空格 例如— a = c + d; 是 及 是 我试过类似的东西 re.sub('^(\"[^\"\n]*\")|\s|\\n', '', line) 但很明显,这是行不通的。找到: r'(".*?")|(\s+)' 替换: r'\1' 其思想是忽略引号内的所有字符,首先将所有引号与(“*?”)内的某个内容匹配,并替换为相同的(\1) 我们知道剩下的空格(\s+)将不在引号内(或者第一条规则将匹配它们),并将这些空格替换为零 既然您
“
”替换每个空格,除了”
之间的千个空格
例如—
a = c + d;
是
及
是
我试过类似的东西
re.sub('^(\"[^\"\n]*\")|\s|\\n', '', line)
但很明显,这是行不通的。找到:
r'(".*?")|(\s+)'
替换:
r'\1'
其思想是忽略引号内的所有字符,首先将所有引号与(
“*?”
)内的某个内容匹配,并替换为相同的(\1
)
我们知道剩下的空格(\s+
)将不在引号内(或者第一条规则将匹配它们),并将这些空格替换为零
既然您在评论中说不需要正则表达式,我将提出一个新概念:不要使用正则表达式 别误会我。我喜欢正则表达式。这是一个非常强大的工具,它几乎可以处理任何你要求它的东西,如果你愿意做一个足够复杂的表达。有时候正则表达式是一个完美的工具,它可以在一个简单的表达式中清除几十行代码 但这是一项简单的任务,取决于一件简单的事情:您需要一个状态,即您是否在报价中 这段代码非常简单,人们甚至会说它不是pythonic。但它是有效的,任何人都可以阅读
def kill_空间(test_str):
内引=假
result=“”
对于test_str中的字符:
如果是字符!=“”或内引:
结果+=字符
如果字符=='“':
内部报价=不在内部报价
返回结果
测试='foo(“再见”,“再见”);'
kill_空间(测试)
>>>“福(“你好,再见”,“再见,你好”);”
是否有任何嵌套的带引号的子字符串需要说明?我怀疑“…”
中也可能有转义的双引号,对吗?@michal您知道,包括您必须使用regex的要求吗?@ScottMermelstein否,但我更喜欢使用regex.@WiktorStribiżew No”嵌套字符串“应该删除g
。我在line=let length=Keyboard.readInt上尝试了re.sub('r'(\“*?\”))|(+)“g','$1',line)
代码>,但那没什么用..编辑:printed让$1length$1=$1Keyboard.readInt($1)
@ndn-\s+会比“+”更好。我觉得有一种更像python的方法来做这件事(除了regex),但我想不出来。我愿意接受建议。
re.sub('^(\"[^\"\n]*\")|\s|\\n', '', line)
r'(".*?")|(\s+)'
r'\1'