使用正则表达式将反斜杠字符写入文件

时间:2018-02-06 22:13:04

标签: python regex

所以假设我收到一串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),它会反复写两次反斜杠而不是一次,因为python不会允许它,所以我不能写r'\'。我该怎么做呢?

使用更多信息进行编辑:

我使用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\")

1 个答案:

答案 0 :(得分:-1)

不要使用re,因为它(显然!)有反斜杠的各种问题。您可以使用标准replace功能:

c = code.replace(r'\\','\\')

- 请注意第一个字符串前的r,但第二个字符串前的不是

这会替换原始字符串中单个出现的\\(其中有12个反斜杠,但只有一个):

code = 'def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t    print(n + \\"\\\\n\\")'
c = code.replace(r'\\','\\')
print (c)

结果

def fib(num):\n\t#insert code here\n\tnumbers = [1, 2, 3]\n\tfor n in numbers:\n\t    print(n + \"\n\")

此结果的其他表示仍然可以显示双反斜杠,但这正是Python所做的:

>> c
'def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t    print(n + \\"\\n\\")'
>>> sys.stderr.write(repr(c)+'\n')
'def fib(num):\\n\\t#insert code here\\n\\tnumbers = [1, 2, 3]\\n\\tfor n in numbers:\\n\\t    print(n + \\"\\n\\")'