1

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

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/'

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

4

1 回答 1

3

您的替换字符串在完全组装后\11000/20\4\110被解释为八进制转义符,H而不是对组号 1 后跟10.

您需要编写\g<1>而不是\1确保它是明确的反向引用。请参阅re.sub.

于 2012-09-13T16:34:54.860 回答