Python:查找URL并添加查询字符串对

时间:2010-11-30 14:53:56

标签: python regex

我正在尝试在Django webapp中附加一些遗留文本。这是一个非常简单的范围。该文本中包含一些亚马逊网址,我希望将?tag=xxx标识符放在其末尾。

我已经编写了一个模板过滤器,我可以快速通过我的文本,但我仍然在编写正则表达式逻辑。

t = text_from_template_engine
return re.sub(r'(https?://(?:www\.)?amazon\.co\.uk[\S]+)', r'\\\1?tag=xxx', t)

这似乎在一个非常基础的层面上工作,但如果URL已经有一个查询字符串(默认情况下有很多有机亚马逊URL),我需要一个&符号而不是问号。

可能有一种快速检测两个问号并替换第二个问号的方法。我对这个建议持开放态度。

我真正想要的是一个正则表达式替换,我可以将找到的字符串传递给另一个方法(我可以检测现有的问号),它可以返回替换字符串。类似PHP的preg_replace_callback(等)。那存在吗?

3 个答案:

答案 0 :(得分:2)

是的,re.sub的第二个参数可以是一个函数,它接受一个match对象并返回一个字符串。请参阅the documentation

答案 1 :(得分:0)

  

可能有一种快速检测两个问号并替换第二个问号的方法。我对这个建议持开放态度。

这将得到2个问号。

(\?|(\?\?))

我认为双重问号的非被动群号为4美元,但您需要仔细检查,并且可以在替换中添加单个问号。

答案 2 :(得分:0)

找到网址后,您最好离开parsing it properly,而不是将其黑客攻击正则表达式。