Python正则表达式\数字添加\ 0x

ACa*_*ter 2 python regex replace

我想在python中对字符串进行简单的正则表达式替换.这是我的代码:

>>> s = "num1 1 num2 5"
>>> re.sub("num1 (.*?) num2 (.*?)","1 \1 2 \2",s)
Run Code Online (Sandbox Code Playgroud)

我希望这样的输出,\numbers被替换为相应的组.

'1 1 2 5'
Run Code Online (Sandbox Code Playgroud)

但是,这是我得到的输出:

'1 \x01 2 \x025'
Run Code Online (Sandbox Code Playgroud)

我有点难过为什么\x0s是他们的,而不是我想在那里.非常感谢任何帮助

Nol*_*lty 6

您需要开始使用原始字符串(使用r作为字符串前缀):

>>> import re
>>> s = "num1 1 num2 5"
>>> re.sub(r"num1 (.*?) num2 (.*?)", r"1 \1 2 \2", s)
'1 1 2 5'
Run Code Online (Sandbox Code Playgroud)

否则你需要为python和正则表达式转义反斜杠,如下所示:

>>> re.sub("num1 (.*?) num2 (.*?)", "1 \\1 2 \\2", s)
'1 1 2 5'
Run Code Online (Sandbox Code Playgroud)

(这真的很老了,请查看python正则表达式文档的开头段落

  • +1.澄清一点:没有`r`,`\ 1`和`\ 2`是八进制(base-8)字符转义,所以``1\1 2\2"`表示一个字符串,其第三个字符是值为"1"的ASCII字符,其第七个字符是值为"2"的ASCII字符.这些字符不是打印字符,因此命令行的漂亮打印机用十六进制字符转义符替换它们,`\ x01`和`\ x02`.但是`\ x0`不在实际的字符串中,它只是在打印的内容中. (3认同)