Python 如何正确使用re.sub捕获组?
我有一个如下所示的URL: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 = 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