灵虚御风
醉饮千觞不知愁,忘川来生空余恨!

导航

 
""""""
"""re模块"""

"""
身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部🈶️数字组成,
首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x,
下面我们尝试用正则来表示:

# 先学正则(正则表达式书写)
# 在re模块

"""
def get_phone():
while True:
phone_number = input('please input your phone number:>>>').strip()
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('16')
or phone_number.startswith('17')
or phone_number.startswith('18')):
print("是合法的手机号码")
else:
print('不是合法的手机号')

# Python isdigit() 方法检测字符串是否只由数字组成
def get_number():
import re
phone_number = input("phone_number input your :>>>")
if re.match('^(13|14|15|16|17|18)[0-9]{9}$',phone_number):
print("是合法的手机号码")
else:
print('不是合法的手机号')

# python使用正则必须借助于re模块 或者是支持正则表达式书写的方法

import re
"""
findall
search
match
"""
def my_findall():
res = re.findall('[a-z]+','eavegon jason')
# # findall('正则表达式','带匹配的字符串')
print(res)
# 找出字符串中符合正则表达式全部内容 并且返回的是一个列表,列表中的元素就是正则匹配到的结果

def get_search():
res = re.search('a','assdfdsf')
# print(res) # search不会给你直接返回匹配到的结果 而是给你返回一个对象
print(res.group())# 必须调用group才能看到匹配到的结果

"""
注意:
1.search只会依据正则查一次 只要查到了结果 就不会再往后查找
2.当查找的结果不存在的情况下 调用group直接报错
"""
"""
注意:
1.match只会匹配字符串的开头部分
2.当字符串的开头不符合匹配规则的情况下 返回的也是None 调用group也会报错
"""
def my_match():
res = re.match('a','addfdddss')
print(res) #<_sre.SRE_Match object; span=(0, 1), match='a'>
print(res.group())

# 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割 返回的还是列表
# ret = re.split('[ab]','abcd')
# print(ret) # ['', '', 'cd']

# 将数字替换成'H',参数1表示只替换1个
# ret = re.sub('\d', 'H', 'eva3egon4yuan4',1)
# # sub('正则表达式','新的内容','待替换的字符串',n)
# """
# 先按照正则表达式查找所有符合该表达式的内容 统一替换成'新的内容' 还可以通过n来控制替换的个数
# """
# print(ret) # evaHegon4yuan4

# ret = re.subn('\d', 'H', 'eva3egon4yuan4') # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
# ret1 = re.subn('\d', 'H', 'eva3egon4yuan4',1) # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
# print(ret) # 返回的是一个元组 元组的第二个元素代表的是替换的个数


# obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
# ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
# res1 = obj.findall('347982734729349827384')
# print(ret.group()) #结果 : 123
# print(res1) #结果 : ['347', '982', '734', '729', '349', '827', '384']


#finditer返回一个存放匹配结果的迭代器

# import re
# ret = re.finditer('\d', 'ds3sy4784a')
# print(ret) # <callable_iterator object at 0x10195f940>
# print(next(ret).group()) # 等价于ret.__next__()
# print(next(ret).group()) # 等价于ret.__next__()
# print(next(ret).group()) # 等价于ret.__next__()
# print(next(ret).group()) # 等价于ret.__next__()
# print(next(ret).group()) # 等价于ret.__next__()
# print(next(ret).group()) # 等价于ret.__next__() 查出迭代取值的范围 直接报错
# print(next(ret).group()) #查看第一个结果
# print(next(ret).group()) #查看第二个结果
# print([i.group() for i in ret]) #查看剩余的左右结果



res1 = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','110105199812067023')
# 还可以给某一个正则表达式起别名
res = re.search('^[1-9](?P<password>\d{14})(?P<username>\d{2}[0-9x])?$','110105199812067023')
# print(res.group())
# print(res.group('password'))
# print(res.group(1))
# print(res.group('username'))
# print(res.group(2))
# print(res.group(2))
# print(res.group(1))
posted on 2022-03-24 16:40  没有如果,只看将来  阅读(16)  评论(0编辑  收藏  举报