python镜像安装re模块_Python模块之re模块

一: re.findall

def findall(pattern, string, flags=0):

pattern: 正则表达式

string: 要匹配的字符串

flag:

返回结果:如果能够匹配到字符串,会将所有匹配到的字符串形成一个列表,然后返回,如果匹配不到,则返回一个空列表

importre

ret1=re.findall('[a-z]+','wangys wc')

ret2=re.findall('[0-9]','wangys')print(ret1)print(ret2)#结果

['wangys', 'wc']

[]

使用分组匹配的时候要注意优先级匹配,需要将优先级取消,才能取得正确的值

importre#正常匹配

ret=re.findall('\d+w\w+','123wangys')print(ret)#['123wangys']

#使用分组正常匹配

ret1=re.findall('\d+(w\w+)','123wangys')print(ret1)#['wangys'] # 结果不正常

#使用分组匹配取消优先级匹配 ?:取消优先级

ret1=re.findall('\d+(?:w\w+)','123wangys')print(ret1)

['123wangys']

二:re.search

def search(pattern, string, flags=0):

pattern: 正则表达式

string: 要匹配的字符串

flag:

返回结果: 通过正则表达式匹配字符串,如果有匹配到一个就返回,返回的结果是包含匹配的字符串的对象,字符串可以使用group()的方法取得,如果没有匹配到返回None,在使用group方法时会报错

importre

ret1=re.search('[a-z]+','wangys,xiaogongzu')print(ret1)print(ret1.group())#<_sre.sre_match object span="(0," match="wangys"> # 如果匹配到就返回一个对象#wangys # 使用group方法可以得到这个匹配结果,从结果上看,确实时第一个匹配结果会返回,后续的不会做为返回值返回

ret2=re.search('\d+','wangys,xiaogongzu')print(ret2)print(ret2.group())#None # 如果匹配不到就返回None#AttributeError: 'NoneType' object has no attribute 'group' # 当使用group方法会报错

#在输出字符串之前使用group之前对结果进行判断#要么返回一个对象,要不返回None,#None为false

importre

ret= re.search('[a-z]+','wangys anyl')ifret:print(ret.group())

ret= re.search('[0-9]+','wangys anyl')ifret:print(ret.group())

三:re.match

match(pattern, string, flags=0)

pattern: 正则表达式

string: 要匹配的字符串

flag:

返回结果: 从字符串开始做匹配,跟search一样

ret1=re.match('[a-z]+','wangys,xiaogongzhu')print(ret1)print(ret1.group())#<_sre.sre_match object span="(0," match="wangys">#wangys

ret2=re.match('[a-v]+','wangys,xiaogongzhu')print(ret2)print(ret2.group())#None#AttributeError: 'NoneType' object has no attribute 'group'

同样为了防止报错,当使用group方法取出匹配的字符串时,要判断返回值是否为None

四:re.split

split(pattern, string, maxsplit=0, flags=0)

pattern: 正则表达式

string: 要匹配的字符串

maxsplit:

flag:

函数 re.split() 是非常实用的,因为它允许你为分隔符指定多个正则模式, 返回结果为一个字段列表,这个跟 str.split() 返回值类型是一样的

当你使用 re.split() 函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。 如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中

返回结果:将使用正则表达式将字符串分隔。

importre

ret1= re.split('[a-z]+','sdfasdf123sdfasf')print(ret1)

['', '123', '']

在使用分组匹配分隔是,会将分隔符也匹配进去

importre

ret1=re.split('\d','1wang4ys5')print(ret1)#['', 'wang', 'ys', ''] 返回结果不会带有被匹配的字符串

ret1=re.split('(\d)','1wang4ys5')print(ret1)#['', '1', 'wang', '4', 'ys', '5', ''] 分组后也会将被匹配的字符串返回

多个分隔符时效果更佳(字符串的split方法只支持 单个分隔符)

importre

line= 'asdf fjdk; afed, fjek,asdf, foo'result= re.split(r'[;,\s]\s*', line)print(result)

result= re.split(r'(?:;|,|\s)\s*', line)print(result)

五:re.sub

sub(pattern, repl, string, count=0, flags=0)

pattern: 正则表达式

repl: 要替换的字符串

string: 要匹配的字符串

count:

flag:

用于字符串替换

importre

ret= re.sub('\d+','wangys','123wangys')print(ret)#将匹配到的数字替换成字符串‘wangys’

六 re.subn

subn(pattern, repl, string, count=0, flags=0)

pattern: 正则表达式

repl: 需要替换的字符串

string: 要匹配的字符串

count:

flag:

返回结果:替换字符串,并将结果和替换次数组成一个元祖的形式返回

importre

ret=re.subn('\d','H','123wangys')print(ret)

# ('HHHwangys', 3)

importre

obj= re.compile('\d{3}') #将正则表达式编译成了一个正则对象

ret = obj.findall('wangys123yl456') #使用该对象匹配字符串

print(ret) #返回结果

7: re.finditer

finditer(pattern, string, flags=0)

pattern: 正则表达式

string: 要匹配的字符串

flag:

返回结果是一个迭代器,取出的值是对象,不是真正的字符串,需要使用group方法取到

importre

ret= re.finditer('[a-z]+','wangys123xiao')print(ret)for i inret:print(i)#返回结果是一个可调用的迭代器对象#<_sre.sre_match object span="(0," match="wangys">#<_sre.sre_match object span="(9," match="xiao">

importre

ret= re.finditer('[a-z]+','wangys123xiao')print(ret)for i inret:print(i.group())##wangys#xiao

flags有很多可选值:

re.I(IGNORECASE)忽略大小写,括号内是完整的写法

re.M(MULTILINE)多行模式,改变^和$的行为

re.S(DOTALL)点可以匹配任意字符,包括换行符

re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用

re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag

re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释

八:练习题

importre

name= "

hello

"

#ret = re.search('\w+\w+>',name)

ret = re.search('\w+)>\w+(?P=tag_name)>',name)print(ret.group())print(ret.group('tag_name')) # 可以输出tag_name这个分组的值是多少

#使用\序号来应用分组匹配

importre

name= "

hello

"ret= re.search(r'\w+\1>',name)print(ret.group())print(ret.group(1)) #可以通过组id取出匹配的字符串

1、 匹配一段文本中的每行的邮箱

http://blog.csdn.net/make164492212/article/details/51656638

2、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’;

分别取出1年的12个月(^(0?[1-9]|1[0-2])$)、

一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$

3、 匹配qq号。(腾讯QQ号从10000开始) [1,9][0,9]{4,}

4、 匹配一个浮点数。 ^(-?\d+)(\.\d+)?$ 或者 -?\d+\.?\d*

5、 匹配汉字。 ^[\u4e00-\u9fa5]{0,}$

6、 匹配出所有整数

实现能计算类似

1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式的计算器程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值