0

我使用python 2.7

我只是尝试用一个值更改正则表达式中的组:

import re

r = "/foo/bar/(?P<pk>[0-9]+)/"
rc = re.compile(r)
#that i try to do : rc["pk"] = 42 and get the resut
print rc.groupindex
#return {'pk' : 1}

我需要这样做,因为我不知道正则表达式,但我知道其中有一个组。

编辑:

我想要这样的结果:

rc["pk"] = 42
#now rc is /foo/bar/42 because (?P<pk>[0-9]+) is replace with 42
4

1 回答 1

0

我不是 python 程序员,但我在许多其他系统中大量使用正则表达式。我相信您可以使用该re.sub函数对组进行反向引用,如下所示:

搜索模式:

'(/foo/bar/)[0-9]+(/)'

更换模式:

'\g<1>42\g<2>'

这将取代

'/foo/bar/17/'

'/foo/bar/42/'

这甚至适用于文件夹名称本身就是表达式的情况:

'(/\w+/\w+/)\d+(/)'

Python 还支持环视语句,如下所示:

'(?<=/foo/bar/)\d+(?=/)'

然后你只需将匹配替换为'42'. (环视不会“消耗”字符,因此'((?<=...)'and中的文本'(?=...)'不会被替换。)

于 2013-02-01T17:26:42.980 回答