我正在尝试在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
(等)。那存在吗?
答案 0 :(得分:2)
是的,re.sub
的第二个参数可以是一个函数,它接受一个match
对象并返回一个字符串。请参阅the documentation。
答案 1 :(得分:0)
可能有一种快速检测两个问号并替换第二个问号的方法。我对这个建议持开放态度。
这将得到2个问号。
(\?|(\?\?))
我认为双重问号的非被动群号为4美元,但您需要仔细检查,并且可以在替换中添加单个问号。
答案 2 :(得分:0)
找到网址后,您最好离开parsing it properly,而不是将其黑客攻击正则表达式。