【发布时间】:2018-02-06 22:13:03
【问题描述】:
假设我收到一串python代码,如下所示:
"def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t print(n + \\"\\\\n\\")"
我想重写这个字符串,这样每次有两个反斜杠时,它们就会被一个反斜杠替换。
我尝试过使用code = re.sub(r'(\\)+', "\\", code),但它给了我一个错误,因为正则表达式模式以反斜杠结尾,即not allowed。
如果我尝试写code = re.sub(r'(\\)+', r'\\', code),但是,它会写两次而不是一次反斜杠,我不能写r'\',因为python不允许它。我该怎么做呢?
编辑更多信息:
我正在使用 sys.stderr.write(repr(code) + '\n') 来查找字符串的表示形式
使用上面的字符串作为输入,我得到以下结果:
方法一
code = re.sub(r'(\\\\)+', r"\\", code)
产量:'def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t print(n + \\"\\n\\")'
并写入文件:\n\t#insert code here\n\tnumbers = [1, 2, 3]\n\tfor n in numbers:\n\t print(n + \"\n\")
方法二
code = code.replace(r'\\', '\\')
产量:'def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t print(n + \\"\\n\\")'
并写入文件:\n\t#insert code here\n\tnumbers = [1, 2, 3]\n\tfor n in numbers:\n\t print(n + \"\n\")
方法三
code = re.sub(r'(\\)+', "\\", code)
产量错误:sre_constants.error: bad escape (end of pattern) at position 0
方法四
code = re.sub(r'(\\)+', r'\\', code)
产量:'def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t print(n + \\"\\n\\")'
并写入文件:\n\t#insert code here\n\tnumbers = [1, 2, 3]\n\tfor n in numbers:\n\t print(n + \"\n\")
【问题讨论】:
-
r'\\'是正确的,问题没有问题,以错字结尾。 -
我得到“语法错误:扫描字符串文字时 EOL”,因为反斜杠正在转义原始字符串引号
-
@usr2564301 不,只有 1 个文字反斜杠。OP 看到控制台输出。
-
Matt,我们需要确定看起来的字符串是否像你显示的那样是的实际字符串。注意不要将 Python 显示的内容与字符串实际包含的内容混在一起。
-
@usr2564301 我用 sys.stderr.write(repr(code) + '\n') 找到了上面的字符串