Python regex\数字添加\0x

2024-04-20 05:09:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对python中的字符串执行一个简单的regex替换。这是我的代码:

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

我希望得到这样的输出,\number被替换为相应的组。在

^{pr2}$

但是,我得到的输出是:

'1 \x01 2 \x025'

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


Tags: 字符串代码renumberregexx01x0num2
3条回答

您需要开始使用原始字符串(在字符串前面加上r):

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

否则,您将需要对python和regex的反斜杠进行转义,如下所示:

^{pr2}$

(这很快就过时了,看看python regex docs的开头段落

\1\2被解释为八进制字符代码转义,而不仅仅是传递给regex引擎。使用原始字符串r"\1"而不是"\1"阻止了这种解释。在

>>> "\17"
'\x0f'
>>> r"\17"
'\\17'

正在字符串中解释\1。因此您必须用反斜杠转义\

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

也可以使用原始字符串:

^{pr2}$

相关问题 更多 >