【问题标题】:Remove the expression from middle of a url从网址中间删除表达式
【发布时间】:2021-09-28 04:47:54
【问题描述】:

我有以下图片网址:

https://img.com/woo/image/u/f_auto,q_auto/w_350/v1619377072/Products/dada/Products/dada/IMG_47473065_IDW_IMAGE_bf30ac4dbbd308c8b0248b954a58a731a5b413b0f6782b834c781d0da621d727_HR.jpg

这里的网址包含默认分辨率,即w_350。我想从此图片网址中删除此分辨率。

图片 url 的最终输出应该是这样的:

https://img.com/woo/image/u/f_auto,q_auto/v1619377072/Products/dada/Products/dada/IMG_47473065_IDW_IMAGE_bf30ac4dbbd308c8b0248b954a58a731a5b413b0f6782b834c781d0da621d727_HR.jpg

我该怎么做?

还有什么比这更好的吗?

re.sub(r"w_\d\d\d/", "", url)

【问题讨论】:

  • 这有点难以确定,但我想也许这样的事情会对你有用:'/'.join([part for part in s.split('/') if not any(part.startswith(prefix) for prefix in ('w_', 'l_'))])

标签: python python-3.x regex


【解决方案1】:

这是另一种方法:如果您确定该模式将仅包含数字 0-9,那么使用 [0-9] 而不是 \d 总是更好,如文档中所述:

\d 匹配任何 Unicode 十进制数字(即 Unicode 字符类别 [Nd])。这包括 [0-9],还有很多 其他数字字符。如果使用 ASCII 标志,则仅 [0-9] 为 匹配。

使用 [0-9] 将减少计算,因为只有数字 0-9 会被匹配,而不是所有的 Unicode 字符。

import re
url = 'https://img.com/woo/image/u/f_auto,q_auto/w_350/v1619377072/Products/dada/Products/dada/IMG_47473065_IDW_IMAGE_bf30ac4dbbd308c8b0248b954a58a731a5b413b0f6782b834c781d0da621d727_HR.jpg'

url = re.sub(r'[a-z]_[0-9]{3}/', '', url)
print (url)

输出:

https://img.com/woo/image/u/f_auto,q_auto/v1619377072/Products/dada/Products/dada/IMG_47473065_IDW_IMAGE_bf30ac4dbbd308c8b0248b954a58a731a5b413b0f6782b834c781d0da621d727_HR.jpg

【讨论】:

    【解决方案2】:

    我刚刚测试过,效果很好

    import re
    pattern = "([a-z]_[0-9]{3}\/)"
    original_string = "https://img.com/woo/image/u/f_auto,q_auto/w_350/v1619377072/Products/f6782b834c781d0da621d727_HR.jpg"
    changed = re.sub(pattern, "", original_string)
    #output   
    

    应该给你这个值

    "https://img.com/woo/image/u/f_auto,q_auto/v1619377072/Products/f6782b834c781d0da621d727_HR.jpg"
    

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      相关资源
      最近更新 更多