我正在尝试对 python 中的字符串进行简单的正则表达式替换。这是我的代码:
>>> s = "num1 1 num2 5"
>>> re.sub("num1 (.*?) num2 (.*?)","1 \1 2 \2",s)
我希望得到这样的输出,将\number
s 替换为相应的组。
'1 1 2 5'
但是,这是我得到的输出:
'1 \x01 2 \x025'
我有点困惑为什么\x0
s 是他们的,而不是我想要的。非常感谢您的帮助
您需要开始使用原始字符串(字符串前缀为 r):
>>> import re
>>> s = "num1 1 num2 5"
>>> re.sub(r"num1 (.*?) num2 (.*?)", r"1 \1 2 \2", s)
'1 1 2 5'
否则,您将需要为 python 和正则表达式转义反斜杠,如下所示:
>>> re.sub("num1 (.*?) num2 (.*?)", "1 \\1 2 \\2", s)
'1 1 2 5'
(这真的很快,请查看python regex 文档的开头段落
\1
并被\2
解释为八进制字符代码转义,而不仅仅是传递给正则表达式引擎。使用原始字符串r"\1"
而不是"\1"
防止这种解释。
>>> "\17"
'\x0f'
>>> r"\17"
'\\17'
\1
正在字符串中解释。所以你必须\
用它自己的反斜杠来转义:
>>> re.sub("num1 (.*?) num2 (.*?)", "1 \\1 2 \\2",s)
'1 1 2 5'
您还可以使用原始字符串:
>>> re.sub("num1 (.*?) num2 (.*?)", r"1 \1 2 \2",s)
'1 1 2 5'