如何正确使用 re.sub 捕获组?

我有一个看起来像这样的URL:

url = https://www.sx.com/found/text.html

我想用捕获组替换第三个和第四个斜杠之间的文本,即我想用一个新的字符串(新闻)替换“找到”,如下所示:

replace = re.sub(r'(?:/.*/)(.*)/', r'/news/\1', url)

期望结果:

replace = https://www.sx.com/news/text.html

但是我得到这个结果:

https:/news/text.html

我在这里做错了什么?


MMTTMM
浏览 154回答 2
2回答

莫回无

您可以使用:>>> url = '  >>> print ( re.sub(r'(.+/)[^/]+(/[^/]*/?)$', r'\1news\2', url) ) https://www.sx.com/news/text.html正则表达式详细信息:(.+/):任何字符的 1+ 个 greed 匹配,后跟 。捕获组 #1/[^/]+:匹配任何非字符的 1+/(/[^/]*/?):匹配下一个,然后是非字符,直到结束。捕获组 #2//$:完

米脂

虽然你应该用它来做这个东西,但你可以尝试urllib(//.*/).*/替换为\1news/请参阅演示。https://regex101.com/r/cuNe0j/1或者你可以试试这个。这样,您就不需要处理解析。urlfrom urlparse import urlparse, urlunsplit x= urlparse("https://www.sx.com/found/text.html") y= x.path.replace("found", "news")print urlunsplit([x.scheme, x.netloc, y,          x.query, x.fragment])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python