正则表达式
引入部分
# 网站新用户注册页面获取手机号
"""
校验规则要求必须是11位的纯数字,而且必须手机号必须是13, 15, 17, 18, 19开头
"""
# python代码可以实现手机校验功能
# 第一步:获取用户的手机号
new_phone_num = input('Deer customers,please enter your phone number>>>:').strip()
# 第二步:先校验是否是11位
if len(new_phone_num) == 11:
# 第三步:再校验是否是纯数字
if new_phone_num.isdigit():
# 第四步:最后校验开头是否符合规则
if new_phone_num.startswith('13') or new_phone_num.startswith('15') or new_phone_num.startswith('17') or new_phone_num.startswith('18') or new_phone_num.startswith('19'):
print('手机号检验成功')
else:
print('手机号开头不符合规则')
else:
print('手机号必须是纯数字')
else:
print('手机号必须是11位')
# 使用正则表达式
import re
new_phone_number = input('please enter your phone number>>>:').strip()
if re.match('^(13|14|15|18|19)[0-9]{9}$', new_phone_number):
print('手机号检验成功')
else:
print('手机号不符合规则')
正则表达式之字符组
|
|
[0-9] |
匹配0到9之间的任意一个数字(简写) |
[a-z] |
匹配a到z之间的任意一个小写字母 |
[0-9a-zA-Z] |
匹配任意一个数字或者大小写字母(没有顺序) |
[0123456789] |
匹配0到9之间的任意一个数字 |
正则表达式之特殊符号
特殊符号 |
作用 |
. |
匹配除换行符以外的任意字符 |
\w |
匹配数字、字母、下划线 |
\d |
匹配任意的数字 |
\t |
匹配一个制表符(tab键) |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结尾 |
\W |
匹配非字母或数字或下划线 |
\D |
匹配非数字 |
a|b |
匹配a或者b,管道符就是or |
() |
给正则表达式分组 ,不影响正则匹配 |
[] |
字符组的概念 |
[^] |
上箭号出现在了中括号的里面意思是取反操作 |
正则表达式之量词
特殊符号 |
作用 |
* |
重复零次或者多次(默认就是多次:越多越好) |
+ |
重复一次或者多次(默认就是多次:越多越好) |
? |
重复零次或者一次(默认就是一次:越多越好) |
|
重复n次 |
|
重复最少n次最多多次(越多越好) |
|
重复n到m次(越多越好) |
复杂正则的编写
校验用户身份证号码
import re
# 身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,首位不能同样为0,前17位全部是数字,末位可能是数字或x
id_num = input('please enter you ID number>>>:')
if re.match('^[1-9][0-9]{14}' or '^[1-9][0-9]{16}[0-9x', id_num):
print('校验成功')
else:
print('号码不符合身份证规范')
校验顺丰快递单号
import re
SF_express_num = input('please enter your express number>>>:')
if re.match('^SF\d{13}$', SF_express_num):
print('校验成功')
else:
print('号码不符合规范')
取消转义
\n \n False
\\n \n True
\\\\n \\n True
贪婪匹配与非贪婪匹配
量词默认都是贪婪匹配,如果想修改为非贪婪匹配,只需要在量词的后面加?
正则 |
待匹配的文本 |
结果 |
<.*> |
<s_cript>qwer1234<s_cript> |
1条,贪婪匹配 |
<.*?> |
<s_cript>qwer1234<s_cript> |
2条,非贪婪匹配 |
re模块
import re
res = re.findall('e', 'Welcome to China')
print(res) # ['e', 'e']
res1 = re.search('e', 'Welcome to China')
print(res1) # <_sre.SRE_Match object; span=(1, 2), match='e'>
print(res1.group()) # e
res2 = re.match('W', 'Welcome to China')
print(res2) # <_sre.SRE_Match object; span=(0, 1), match='W'>
print(res2.group()) # W
res3 = re.finditer('e', 'Welcome to China')
print(res3) # <callable_iterator object at 0x000001F9AC99A320>
print([obj.group() for obj in res3]) # ['e', 'e']
obj = re.compile('\d+?')
print(re.findall(obj, 'qwer123uiop789')) # ['1', '2', '3', '7', '8', '9']
print(re.findall(obj, 'qazwsx147258bhunj8520imkolp369')) # ['1', '4', '7', '2', '5', '8', '8', '5', '2', '0', '3', '6', '9']