2

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

>>> s = "num1 1 num2 5"
>>> re.sub("num1 (.*?) num2 (.*?)","1 \1 2 \2",s)

我希望得到这样的输出,将\numbers 替换为相应的组。

'1 1 2 5'

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

'1 \x01 2 \x025'

我有点困惑为什么\x0s 是他们的,而不是我想要的。非常感谢您的帮助

4

3 回答 3

7

您需要开始使用原始字符串(字符串前缀为 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 文档的开头段落

于 2012-05-18T17:47:33.390 回答
1

\1并被\2解释为八进制字符代码转义,而不仅仅是传递给正则表达式引擎。使用原始字符串r"\1"而不是"\1"防止这种解释。

>>> "\17"
'\x0f'
>>> r"\17"
'\\17'
于 2012-05-18T17:48:58.367 回答
1

\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'
于 2012-05-18T17:50:42.713 回答