为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2022-09-20 15:34:09
我有一个看起来像这样的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我在这里做错了什么?
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您可以使用:

>>> url = ' 
>>> print ( re.sub(r'(.+/)[^/]+(/[^/]*/?)$', r'\1news\2', url) )
https://www.sx.com/news/text.html

正则表达式详细信息:

  • (.+/):任何字符的 1+ 个 greed 匹配,后跟 。捕获组 #1/

  • [^/]+:匹配任何非字符的 1+/

  • (/[^/]*/?):匹配下一个,然后是非字符,直到结束。捕获组 #2//

  • $:完


查看完整回答
反对 回复 2022-09-20
?
米脂

TA贡献1836条经验 获得超3个赞

虽然你应该用它来做这个东西,但你可以尝试urllib

(//.*/).*/

替换为

\1news/

请参阅演示。

https://regex101.com/r/cuNe0j/1

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

from 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])


查看完整回答
反对 回复 2022-09-20
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信