刘荣星的博客

  • 留言
  • About
一个关注Linux/BSD运维等相关知识的博客
  1. 首页
  2. Python
  3. Python 正则
  4. 正文

分析一正则表达式替换例子

2013-11-16 8456点热度 0人点赞 0条评论

今天下班途中,在我的 Pocket 列表中看到前些天丢进来的《Python编程中常用的12种基础知识总》一文中的第一个例子:
正则表达式替换。
目标: 将字符串 line 中的 overview.gif 替换成其他字符串

随便分析了一下,感觉不通顺,虽想回家好好分析下,结果掉一坑里去了。文中例子代码丢失一段,导致我想了半天都没想去为啥就要这样匹配,后来机智的我想到肯定是代码不全,Google 了下找到了。在这里鄙视下那些 Ctrl C,Ctrl V 的,万一一个启动脚本里有个 rm -rf / tmp/xxx 那不完蛋了。

cat 03_subtest.py

#!/usr/bin/python

import re

# line = '<IMG ALIGN="middle" SRC=\'#\'" /span>    # 就是这段坑了我
line = '<IMG ALIGN="middle" SRC="overview.gif" BORDER="0" ALT="">'
# 将正则表达式编译成Pattern对象
pattern = re.compile(r'(?<=SRC=)"([\w+\.]+)"',re.I)

# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None 注意: 其中 \1 是上面()组匹配到的数据,可以通过这样的方式直接引用
str1 = pattern.sub(r'"\1****"',line)
print str1

str2 = pattern.sub(r'replace_str_\1',line)
print str2

str3 = pattern.sub(r'"testetstset"',line)
print str3

来分析上面的正则:

(?<=SRC=)"([\w+\.]+)"

拆分成两段来理解:1、 (?<=SRC=)     2、"([\w+\.]+)"

  1. (?<=SRC=)
    (?<=xxx) A positive lookbehind --反向预搜索啥是预搜索?反向应该就是反过来的意思吧?在正则中特殊符号:"^","$","\b"。它们都有一个共同点,那就是:它们本身不匹配任何字符,只是对 "字符串的两头" 或者 "字符之间的缝隙" 附加了一个条件。这个预搜索也是像它们一样是个“附加条件”,不过他们的表示方法更加灵活。(?<=xxx) 所在缝隙(就是要匹配的东西缝隙,这里就是"([\w+\.]+)" 匹配到的内容为分割线)的左侧,必须能够匹配上 xxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 "\b",本身不匹配任何字符。"\b" 只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

    这里的意思是要匹配的内容前面(左则)为 SRC= 才算。就好比"^"要匹配的内容必须是第一个位置一个道理。

  2. "([\w+\.]+)"
    one-of-2 one-of[\w+\.] 表示 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_,. 中任意一个,
    这里面的+号我觉得是多余的了。[\w+\.]+ 这里加上加号就是匹配至少1个里面的东西。"([\w+\.]+)" 加上() 表示一个组,然后再加上""就可以匹配出 "middle" "overview.gif" "0" 这三个结果了,怎么得到我们想要的"overview.gif"?

    就要用到前面的 “附加条件了” 附加条件就是 匹配前面有 SRC=

输出结果如下:

javasboy@debianp3  ~/python # python 03_subtest.py
<IMG ALIGN="middle" SRC="overview.gif****" BORDER="0" ALT="">
<IMG ALIGN="middle" SRC=replace_str_overview.gif BORDER="0" ALT="">
<IMG ALIGN="middle" SRC="testetstset" BORDER="0" ALT="">

Tips:

  1. 揭开正则表达式的神秘面纱
  2. RegExr:
    http://gskinner.com/RegExr/ 提供了一个方便的开发工具,可以很方便的测试正则表达式是否有效。

    1. 表达式单元拆分
    2. 内容实时匹配
    3. 多模式
  3. Debuggex:
    http://www.debuggex.com/ 提供更为丰富的正则执行流可视化。

下一篇将会转载一篇《Python正则表达式指南》

标签: 暂无
最后更新:2014-01-02

JavasBoy

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
在VMWare Workstation虚拟机里使用 yubikey Gentoo Gnome 登陆界面开启触摸板轻击 python3去除emoji表情符号 记录几个内网广播包 Linux Mint 20 gnome-terminal 使用等距更纱黑体 SC字体 FreeBSD12安装GoLand编辑器
解决了AE自带的Color Finesse注册问题 为Debian换上AIT驱动 FreeBSD 10.0-RELEASE on Lenovo ThinkPad X61s 新版serv-U 11.2管理员密码设置方法 记录几个内网广播包 今天到家了
分类
  • After Effects / 20篇
  • Apple / 5篇
  • Archlinux / 4篇
  • Bash / 2篇
  • Cinema 4D / 1篇
  • Docker / 1篇
  • eMule / 2篇
  • FreeBSD / 9篇
  • Gentoo / 1篇
  • Go / 2篇
  • gpg / 1篇
  • Graphics / 15篇
  • Haproxy / 1篇
  • ingress / 1篇
  • IntelliJ_IDEA / 1篇
  • java / 2篇
  • kafka / 1篇
  • Linux / 24篇
  • MySQL / 3篇
  • Network / 4篇
  • network / 3篇
  • Nginx / 5篇
  • Perl / 4篇
  • Python / 8篇
  • Python 操作符 / 1篇
  • Python 正则 / 2篇
  • rose / 1篇
  • Script / 4篇
  • Tornado / 1篇
  • Vim / 5篇
  • 学习 / 24篇
  • 电脑 / 29篇
  • 那不勒斯 / 1篇
  • 随笔 / 45篇
标签聚合
python FreeBSD After Effects MAC Linux 双系统 Graphics AE

COPYRIGHT © 2023 刘荣星的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang