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
原文:https://www.cnblogs.com/andy117/p/10871353.html