Python正则表达式替换不起作用

2024-04-25 16:51:37 发布

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

我试图创建一个正则表达式来替换字符串的一部分。以下是字符串示例:

string = u'/nl/nl/1681/1/0/a/all/'
pattern = r'(/\w{2}/\w{2}/)(\d+)/(\d+)(/\d+/[ans]/all/)'
pattern_obj = re.compile(pattern)

模式指定了4个组。如果进行搜索,则结果如下:

m = pattern_obj.search(string)
m.group(0) -> u'/nl/nl/1681/1/0/a/all/'
m.group(1) -> u'/nl/nl/'
m.group(2) -> u'1681'
m.group(2) -> u'1'
m.group(4) -> u'/0/a/all/'

到目前为止还不错。现在我指定一个替换字符串,如下所示:

replacement = r'\1' + '1000' + '/' + '20' + r'\4'

并发表以下声明:

pattern_obj.sub(replacement,string)

结果是:

u'H00/20/0/a/all/'

我预料到了:

u'/nl/nl/1000/20/0/a/all/'

我一定是做错了什么,但我不知道是什么。有人能帮我吗?你知道吗


Tags: 字符串reobj声明示例searchstringnl
1条回答
网友
1楼 · 发布于 2024-04-25 16:51:37

完全组装后的替换字符串是\11000/20\4,而\110将被解释为H的八进制转义,而不是对第1组的向后引用,后跟10。你知道吗

您需要编写\g<1>而不是\1,以确保它是明确的反向引用。见the documentation for ^{}。你知道吗

相关问题 更多 >