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

Python 如何正确使用re.sub捕获组?,python,regex,Python,Regex,我有一个如下所示的URL: url = https://www.sx.com/found/text.html 我想用一个捕获组替换第三个和第四个斜杠之间的文本,也就是说,我想用一个新的字符串news替换“found”: replace = re.sub(r'(?:/.*/)(.*)/', r'/news/\1', url) 预期结果: replace = https://www.sx.com/news/text.html 然而,我得到了这个结果: https:/news/text.html

我有一个如下所示的URL:

url = https://www.sx.com/found/text.html
我想用一个捕获组替换第三个和第四个斜杠之间的文本,也就是说,我想用一个新的字符串news替换“found”:

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

replace = https://www.sx.com/news/text.html
然而,我得到了这个结果:

https:/news/text.html
我做错了什么?

您可以使用:

>>> url = 'https://www.sx.com/found/text.html'
>>> print ( re.sub(r'(.+/)[^/]+(/[^/]*/?)$', r'\1news\2', url) )
https://www.sx.com/news/text.html
正则表达式详细信息:

.+/:任何字符的1+匹配,后跟/。捕获组1 [^/]+:匹配任何不匹配字符的1+/ /[^/]*/?:匹配下一个/后跟非-/字符,直到结束。捕获组2 $:完 您可以使用:

>>> url = 'https://www.sx.com/found/text.html'
>>> print ( re.sub(r'(.+/)[^/]+(/[^/]*/?)$', r'\1news\2', url) )
https://www.sx.com/news/text.html
正则表达式详细信息:

.+/:任何字符的1+匹配,后跟/。捕获组1 [^/]+:匹配任何不匹配字符的1+/ /[^/]*/?:匹配下一个/后跟非-/字符,直到结束。捕获组2 $:完 虽然您应该使用urllib来完成这些工作,但使用re您可以尝试

(//.*/).*/
取而代之

\1news/
见演示

或者你可以试试这个。有了它,您就不需要处理url解析了

虽然您应该使用urllib来完成这些工作,但使用re您可以尝试

(//.*/).*/
取而代之

\1news/
见演示

或者你可以试试这个。有了它,您就不需要处理url解析了

使用re.subr'^https?:/[^/]*/[^/]+/',r'\1news/',url使用re.subr'^https?:/[^/]*/[^/]+/',r'\1news/',url