re 模块1

re 模块

正则表达式:  字符串匹配的

学习正则表达式

学习使用re模块来操作正则表达式

 

如: 判断一个收集号是不是合法的   用下面来实现

while True:

    phone_number = input('please input your phone number : ')

    if len(phone_number) == 11 \

            and phone_number.isdigit()\

            and (phone_number.startswith('13') \

            or phone_number.startswith('14') \

            or phone_number.startswith('15') \

            or phone_number.startswith('18')):

        print('是合法的手机号码')

    else:

        print('不是合法的手机号码')

 

 

换做正则就简单多了

 

import re

phone_number = input('please input your phone number : ')

if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):

        print('是合法的手机号码')

else:

        print('不是合法的是手机号码')

 

 

^(13|14|15|18)[0-9]{9}$  这就是规则

在python 是要用re模块来操作正则的 正则本身就是一门语言 数据分析要详细学

介绍正则的书发了网址 http://tool.chinaz.com/regex/

 

正则表达式实质

略:

 

 

 

 

import re

findall   找所有

search    找第一个

match     从头开始找一个

 

ret=re.findall('a','sadasd yuan')#  意思是匹配 a  在‘sadasd yuan’有几个

print(ret)                 

 输出   ['a', 'a', 'a']

 

ret=re.findall('[a-z]+','sadasd yuan')#  finall是返回所有满足匹配条件的结果,放在列表里

print(ret)      

输出  ['sadasd', 'yuan']

 

res=re.search('a','eva egon yuan')  #search 是找的意思

#需要调取group再能找到

print(res.group())

输出  a

 

res=re.search('j','eva egon yuan')  #如果没有j  会报错  报错之前可以 看一下res 是None

print(res)

print(res.group())

报错

从前往后,找到一个就返回,返回的变量需要调用group才能拿到结果如果没有找到,那就好

返回None ,因为None调group会报错

# 最常用的方式

res=re.search('j','eva egon yuan')

if res:

    print(res.group())

表示 如果res是None就不打印  就是有就输出没有就不进到if语句中

 

match 是匹配的意思

res=re.match('e','eva egon yuan')

if res:

    print(res.group())

输出  e

match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。

匹配的内容需要用group才能显示

如果没匹配上,就返回None,调用group会报错

 

ret = re.split('[ab]', 'abcd')

# 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割

print(ret)  #输出 ['', '', 'cd']

 

ret = re.sub('\d', 'H', 'eva3egon4yuan4',1)

将数字替换成'H',参数1表示只替换1个

print(ret) #输出evaHegon4yuan4

 

ret = re.subn('\d', 'H', 'eva3egon4yuan4')

#将数字替换成'H',返回元组(替换的结果,替换了多少次)

print(ret)

#输出('evaHegonHyuanH', 3)

 

obj = re.compile('\d{3}')

#将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字

ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串

print(ret.group())

ret = obj.search('abcashgjgsdghkash456eeee3wr2') #正则表达式对象调用search,参数为待匹配的字符串

print(ret.group())  #结果 : 123  456

 

import re

ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器

print(ret)  # <callable_iterator object at 0x10195f940>

# print(next(ret).group())  #查看第一个结果 3

# print(next(ret).group())  #查看第二个结果4

# print([i.group() for i in ret])  #查看剩余的左右结果  ['7', '8', '4']

for i in ret:

    print(i.group())     #34784

posted @ 2019-05-15 18:45  andy117  阅读(141)  评论(0编辑  收藏  举报