以前用php做数据采集,做了有小半年,所以对php的正则用法还是很熟悉,转用python后,流程还是差不多,只是python的相关函数用法和php不一样。
php正则匹配函数倒是很简单,preg_match,preg_match_all,preg_replace, 直接就可以拿来用了,是否使用贪婪模式,是否区分大小写直接在正则表达式里指明。
再来看看python
import re # 匹配开头结尾 str="efg fwef safeasafsdf kkk" reg=r"fg(.+)kkk"
# 要把正则表达式编译一下, 其实不编译也行, 直接 re.match(正则表达式,要匹配的对象)就能实现,
# 但是为什么要编译(cmopile)呢?因为如果很多地方用到这个匹配的话,可以提高效率
pat=re.compile(reg)
# match 这里有个特点那就是他是从开头开始匹配,相当于默认在匹配式开头加了 ^ ,这里匹配式相当于 ^fg(.+)kkk
m=pat.match(str) #没有结果 if m: print m.group() # search和match类似,但是他并不会从开头开始 m=pat.search(str)
#有结果 if m: print m.group()
# match和search 可以用在验证字符数据的地方(例如验证邮箱,电话等) 或 无需得到括号里匹配内容的结果里。
# findall可以以元组的形式匹配返回匹配内容
# 如果返回的结果有中文,要进一步遍历之后才能正确显示中文
str="efg fwef safeasafsdf kkk efg hello 你好啊 kkkefg 我很好 kkk efg 卡卡 " reg=r"Fg(.+?)kkk" pat=re.compile(reg,re.I|re.S) m=pat.findall(str) print m # 匹配是个有效邮箱 email='1232_abcw+aw@qq.com'
# w 表示数字字母和下滑线,也叫字符型,后面的re.I 表示忽略大小写,re.S 表示.代表任意字符(这里不用加,只是做示范) pat=re.compile(r'^[w|+]+@[w|.]+$',re.I|re.S) m=pat.search(email) if m: print 'this is a email' print m.group()