我试图创建一个正则表达式来替换字符串的一部分。以下是字符串示例:
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/'
我一定是做错了什么,但我不知道是什么。有人能帮我吗?你知道吗
完全组装后的替换字符串是
\11000/20\4
,而\110
将被解释为H
的八进制转义,而不是对第1组的向后引用,后跟10
。你知道吗您需要编写} 。你知道吗
\g<1>
而不是\1
,以确保它是明确的反向引用。见the documentation for ^{相关问题 更多 >
编程相关推荐