Python匹配路径中的字符串并替换为以前的路径项

时间:2017-02-25 22:38:52

标签: python regex uri

假设我有这个路径(字符串类型)

/user/{id}/list/{id}

我想搜索“id”以及每次完全匹配,我想用前一个路径+'_id'替换id。因此,在上面的示例中,所描述的过程将导致

/user/{user_id}/list/{list_id}

我怎么能在python中做到这一点?

编辑:我还想将新的id名称存储在变量中,所以我猜测操作不应该就位。

Edit2:路径中可能有无限数量的{id}次出现

1 个答案:

答案 0 :(得分:3)

在替换字符串中使用捕获组和对此捕获的引用:

re.sub(r'([^/]+)/{id}', r'\1/{\1_id}', s)

如果您想将替换项存储在列表中,您可以这样做:

(python 2.7)

def rep(m):
    ids.append('%s_id'%m.group(1))
    return '%(g1)s/{%(g1)s_id}'%{'g1':m.group(1)}

ids=[]

re.sub(r'([^/]+)/{id}', rep, s)

(python 3.x)

def rep(m):
    ids.append('{}_id'.format(m.group(1)))
    return '{0}/{{{0}_id}}'.format(m.group(1))