原来的需求是要把石墨文档的文件完全搬到本地,但是图片都在云端,就需要用正则表达式匹配到文档里的网络图片链接,然后弄下来并改文件夹为本地路径。

后面增加了想法,有没有一个正则表达式可以把任意网络文件中的网络图片地址都匹配出来,不管这文本有多乱,只要这个文本可能有意义。

折腾了一下应该是有办法的。

需求如下:

有如下乱七八糟的文本

图片1:
https://img.alicdn.com/imgextra/i3/194/TB22Vj0dwoQMeJjy0FoXXcShVXa_!!194-2-luban.png_120x120q90.jpg_.webp
MyPic1:http://img.shimo.com/pic/mypic/Jd7oOG9IjwwAnNU.png100*100.pngMyPic2:http://img.shimo.com/Jd7oOG9IjwwAnNU.png!thumbnail)<img src = "https://img.alicdn.com/f/Jd7oOG9IjwAnNU7.png!thumbnail">图片2:https://uploader.shimo.im/f/deuk64Z2MLcWI91O.png图片3:https://uploader.shimo.im/f/deuk64Z2MLcWI91O.png!thumbnailhttps://www.baidu.comhttps://uploader.shimo.im/f/TIHc0HxMY4kUa.jpg.100*100.jpg(https://uploader.shimo.im/f/deuk64Z2MLcW.png.500x500.png!thumbnail)

要匹配所有的网络图片链接,如下图

注意,如图片存储于本地如localfolder则不匹配

解决方案:

正则表达式:

(https?:[^:<>"]*\/)([^:<>"]*)(\.((png!thumbnail)|(png)|(jpg)|(webp)))

可以不断再往后增加可能的后缀类型,只要你想。

可以放到正则官网测试:https://regexr.com/

测试结果:

注意,此方法不是基于html的,换句话说不依赖于img标签。

原理:

先找到http或者https标签,然后一直往右找,如果遇到 " < > : 这几个不能出现在文件名中的字符就停止(这里是因为避免两个链接在同一行,不加的话会把两个链接连一起匹配出来)。

然后找到最后一个 / 号,就可以获取左侧的网络前缀,这部分在下载后可以替换为本地路径。

然后往右侧尽可能的找,直到找到最后一个png或者jpg后缀为止。(注意这里png!thumbnail也是一种后缀,用于压缩后的图片)。

xxxx * 是正则表达式中的贪婪模式,此处尽可能往右找是因为有的网络图片以.png100*100.png为后缀,如果找到第一个"png"就停止了则没法获取完整文件名。

纠结:

但是如果像如下格式,整行都会被匹配上

新图片地址:https://img.alicdn.com/f/Jd7oOG9IjwAnN7.png!thumbnail,随手备份下我存在E盘里localfolder/mypic.png

但其实我只要前面的这串: https://img.alicdn.com/f/Jd7oOG9IjwAnN7.png!thumbnail

如果遇到这种情况怎么办呢?

我决定不钻牛角尖了,情况有千千万,还是要根据自己当前使用的情景写正则,没有哪个正则能适用哪怕某一类的所有场景。

甚至写代码的话经常用最简单的replace都行,反正只是个工具,快速解决需求才是关键的!

正则表达式匹配任意文本中的网络图片链接相关推荐

  1. 【python正则表达式匹配获取文本中的11位手机号码】

    [python正则表达式匹配获取文本中的11位手机号码] 文前白话 代码实现 效果 正则知识补充 文前白话 根据需要,匹配一段没有固定格式的文本,识别其中的11位数字作为手机号,如果11位数字后还有数 ...

  2. 关于正则表达式匹配任意字符

    关于正则表达式匹配任意字符 今天在Java中想使用正则表达式来获取一段文本中的任意字符.于是很随意得就写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现 ...

  3. java 匹配任意字符_正则表达式匹配任意字符(包括换行符)

    正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符.但有时候我们需要匹配包括换行符在内的字符,经过一番搜索,发现了几种正则表达式匹配任意字符 ...

  4. php正则匹配任意字符串,正则表达式匹配任意字符(包括换行符)

    正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符.但有时候我们需要匹配包括换行符在内的字符,经过一番搜索,发现了几种正则表达式匹配任意字符 ...

  5. 正则表达式 匹配任意长度的字符

    正则表达式 匹配任意长度的字符 语法: .*? 例子: September 9th 2020, 16:59:00.692 [jmfen-sport-recommend-service:172.17.7 ...

  6. excel中用正则匹配_excel 利用正则表达式匹配工作表中的数据

    excel 利用正则表达式匹配工作表中的数据 sheet1中A列放需要匹配的数据 sheet2中A列放正则表达式,可以是多个,但至少一个 匹配到了则在sheet1中C列对应行显示相关标记内容,比如本案 ...

  7. Python正则匹配 去除文本中的各类emoji表情符号

    我们的文本数据中经常会带有很多表情,如何完整地清除得到高质量的文本供我们利用呢? p = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U ...

  8. java正则任意字符_正则表达式匹配任意字符(包括换行符)的写法

    今天在Java中想使用正则表达式来获取一段文本中的任意字符.于是很随意得就写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,". ...

  9. perl正则表达式匹配任意单字符_PHP七天系列之正则表达式

    正则表达式 正则表达式被用来检索或替换那些符合某个模式的文本内容. 许多程序设计语言都支持利用正则表达式进行字符串操作.例如:JavaScript.PHP.ASP.JAVA.Perl.C#..NET. ...

  10. 用正则表达式匹配网址URL中最后一个反斜杠/后面的内容

    测试内容: http://b174.photo.store.qq.com/psb?/V10CD1yE07IujV/eMbKzb1rzHY56uejjCDlOsR3hhQY53jBobTL7Zh9lUg ...

最新文章

  1. 禁止右键 巧妙破解右键被禁的方法
  2. Cookie 和 Session的区别
  3. hbuilder怎么做登录界面_hbuilder 第三方登录实例
  4. 可怕!公司部署了一个东西,悄悄盯着你···
  5. 【内核驱动】 Kconfig简介
  6. linux中xjvf指令,linux解压缩命令小结
  7. c语言指令 符号表,C语言指令、符号表
  8. linux课程--实验三 vi 基本操作
  9. 北京IMAX影院全攻略
  10. 瑞幸咖啡上市被评“蒙眼狂奔”,CEO钱治亚回答:狂奔是真的,但并非蒙眼
  11. 伦敦城市级MaaS出行服务可行性研究
  12. 机器学习入门-强烈推荐-经典好文
  13. 唐国庆出任木林森执行总经理,给木林森带来怎样的想象空间?
  14. 课堂教学实践研究之人教版九年级上册“阅读与思考”《旋转对称》
  15. 气象站可以用计算机分析什么数据,多功能气象站有什么用
  16. warning:iteration 7 invokes undefined behavior
  17. Linux虚拟机增加sda容量
  18. 学习笔记0601----mysql主从
  19. JavaScript的前生今世
  20. Dux主题 V6.4 新增百度收录

热门文章

  1. 攒齐智能产品组合,世界召唤四大超级力量
  2. 如何修复cdn服务器异常,cdn服务器连接异常解决方法
  3. tomcat安全加固手册
  4. android手机和包支付,中国移动和包支付客户端下载-和包支付appv9.7.16 安卓版-腾牛安卓网...
  5. Microsoft Office 2013 word MathType 报错 (MathPage.wll)
  6. 百度校招小结:我做技术面试官的一些思考
  7. bootstrapTreeTable 树性插件不能够自动展开的问题
  8. #读书笔记# 《人类简史》Chapter7
  9. html5 励志名言,励志名言五十条
  10. mimax 刷原生android,小米手机想爽刷原生安卓?不愁!