Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Regex-替换特定的字符EXPEPT特定的字符串_Python_Regex - Fatal编程技术网

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'