python-正则表达式

正则表达式,用来处理字符串的匹配,在python中,所有正则表达式的功能都封装在 re 模块中。

● 常用的匹配规则:

#身份证号:  

    "[1-9][0-9]{14}(\d{2}[0-9X])?"

#手机号

    '^1(3|5|7|8)[0-9]{9}$'

#汉字

    '^[\u4e00-\u9fa5]{0,}$'


●  re 中的方法

●  findall(reg,str)方法,reg是匹配的规则,str是 被匹配 的字符串    ——  返回所有匹配内容的数组

    例如:

import re

ret=re.findall("[^a-z]{5,15}?","dsfkjasdkfasldkfjsakdf 双方都看见撒地方看123sadfsdfkj");

print(ret)#返回匹配的数组

如果匹配规则里有捕获组,即()内的匹配规则,则只返回各()里的内容

ret=re.findall("[1-3]*([a-z]{5,15})","dsfkjasdkfasldkfjsakdf 双方都看见撒地方看123sadfsdfkj");

print(ret)    #返回匹配的数组,如果有捕获组,则被匹配之后只返回捕获组里的内容

    # 结果 ['dsfkjasdkfasldk', 'fjsakdf', 'sadfsdfkj']

解决办法就是在匹配规则的捕获组里加上 ?:  告诉程序是非捕获组

ret=re.findall("[1-3]*(?:[a-z]{5,15})","dsfkjasdkfasldkfjsakdf 双方都看见撒地方看123sadfsdfkj")

print(ret)

#打印结果   ['dsfkjasdkfasldk', 'fjsakdf', '123sadfsdfkj']

● search(reg,str) 方法,找到第一个就返回,返回结果是一个对象,需要调用group()方法才能获取到匹配值

ret=re.search("[1-9][0-9]{14}(\d{2}[0-9X])?","打瞌睡福132195623581287建阿斯蒂芬框架sdfjksdflkjasdf 110410199810030936sdfksdfk")

         #寻找身份证号 首位不能是0 15为纯数字或17位纯数字加末尾一个数字或X,

print(ret)    #search方法如果匹配到,会返回一个对象,需要调用group方法,才能获取匹配到的值,如果没匹配到则返回none,所以需要先判断再调用,否则报错

if ret:

    print(ret.group())

● match(reg,str)方法,从开头开始就匹配了就返回.开头没匹配就返回none,即使后边能匹配也是none. 也是返回一个对象 需要调用group()方法

ret=re.match("www\.(baidu|twob)\.com","www.twob.comsadfkasdjf撒地方看拉接收到分开交水电费我乌尔就开始大幅www.baidu.com")

print(ret);

if ret:

     print(ret.group())

● sub(reg,tar,str) 根据正则表达式替换字符串,reg是匹配规则,tar是要替换成的内容,str是被替换的字符串,返回 一个新的字符串

        注意:sub的结果不直接作用于原变量,需要新变量接收才能查看替换后的字符串,原字符串不变

str="""撒地方看拉接收到斯蒂芬金卡是sdksdjfsd fkl123

9879324kjsdf LKFJKLIJ&^LKJKLKds98fklj

第三方科技阿斯蒂芬"""

ret=re.sub("[a-z0-9]{4,}?","shit",str)

print(ret);

 split(reg,str) 根据正则表达式来切分字符串,返回一个被切分后的数组

ret=re.split("k+",str)

print(ret)

#  打印结果:['撒地方看拉接收到斯蒂芬金卡是sd', 'sdjfsd f', 'l123\n9879324', 'jsdf LKFJKLIJ&^LKJKLKds98f', 'lj\n第三方科技阿斯蒂芬']

如果想要切分结果带着切分规则部分内容的话,需要捕获切分规则,如下:

ret=re.split("(k)+",str)

print(ret)

#打印结果 ['撒地方看拉接收到斯蒂芬金卡是sd', 'k', 'sdjfsd f', 'k', 'l123\n9879324', 'k', 'jsdf LKFJKLIJ&^LKJKLKds98f', 'k', 'lj\n第三方科技阿斯蒂芬']

● compile(reg)   把较长的需要重复利用的正则表达式编译成一个正则表达式对象,然后重复调用,效率会高

comp=re.compile(".div.{5}");

str1="""

可是对方卡是大姐夫卡是大姐夫sad开了房卡的房间卡萨打飞机框架撒打开房间阿萨德发

sadfsadf sadfZfsaddf

这个是不需要获取的

"""

ret =re.finditer("[a-z]{5:}?",str1)

print(ret)

for iin ret:

    print(i.group())

ret=comp.findall(str1)

print(ret)

你可能感兴趣的:(python-正则表达式)