该知识点不属于任何一门编程语言,是一个独立的学科,主要用于数据的查找与筛选
# 不使用正则表达式- phone_num = input('请输入您的手机号码:').strip()
- if phone_num.isdigit():
- if len(phone_num)==11:
- if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith('19') or phone_num.startswith('17'):
- print('手机号合法')
- print(int(phone_num))
- else:
- print('手机号开头不对')
- else:
- print('手机号必须是11位')
- else:
- print('手机号必须是纯数字')
-
- # 正则表达式实现
- import re
- phone_num = input('请输入您的手机号码:').strip()
- if re.match('^[13|15|17|19][0-9]{9}',phone_num):
- print(phone_num)
- else:print('输入不合法')
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义,然后去字符串中筛选出符合条件的数据
| 字符组 | 意义 |
|---|---|
| [0-9] | 匹配0到9之间的任意数字(包括0和9),全称:[0123456789] |
| [A-Z] | 匹配A到Z之间的任意字母(包括A和Z),全称:[ABCDEFGHIJKLMOPQRSTUVWXYZ] |
| [a-z] | 匹配a到z之间的任意字母(包括a和z),全称:[abcdefghijklmnopqrstuvwryz] |
| [0-9a-zA-Z] | 数字、大小写的所有字母都可以匹配 |
| 特殊符号 | 意义 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字下划线 |
| \W | 匹配非字母、数字或下划线的任意字符 |
| \d | 匹配数字 |
| ^ | 匹配字符串的开头 |
| ^..$ | 精确匹配具体数值,只能匹配^和$之间的数据值 |
| $ | 匹配字符串的结尾 |
| a|b | 匹配字符a或b(管道符一般都表示或) |
| () | 给正则表达式分组,不影响正则表达式的匹配(用于后续给正则表达式起别名,分组获取数据) |
| [] | 匹配[ ]内的字符 |
| [^] | 匹配除[ ]内的所有字符 |
量词不能单独使用,必须跟在表达式后面,并且只能影响紧挨着的左边那个
| 量词 | 意义 |
|---|---|
| * | 重复零次或多次(默认尽可能多) |
| + | 重复一次或多次(默认尽可能多) |
| ? | 重复零次或一次(默认就是一次) |
| {n} | 重名n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
| 正则表达式 | 字符串 | 结果 |
|---|---|---|
| 海. | 海燕海娇海东 | 海燕、海娇、海东(三条) |
| ^海. | 海燕海娇海东 | 海燕 |
| 海.$ | 海燕海娇海东 | 海东 |
| 李.? | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
| 李.+ | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
| 李.{1,2} | 李杰和李莲英和李二棍子 | 李杰和 |
| 李[杰莲英二棍子] | 李杰和李莲英和李二棍子 | 李杰、李莲英、李二棍子 |
| 李[ ^ 和 ]* | 李杰和李莲英和李二棍子 | 李杰、李莲英、李二棍子 |
| [\d] | 456bdha3 | 4、5、6、3 |
| [\d]+ | 456bdha3 | 456、3 |
所有量词默认都是贪婪匹配,但是如果量词的后面紧跟一个问号,就会变成非贪婪匹配
以后我们在使用贪婪匹配或者非贪婪匹配的时候,一般都是用 .* 或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
待匹配文本:- 正则表达式:<.*> # 贪婪匹配
- 结果是:
就是在斜杠前面加斜杠
\\n ===> \n- \\\\n ===> \\n
r'\n'- r'\\n
1.编写校验用户手机号的正则- 0?(13|14|15|17|18|19)[0-9]{9}
- 2.编写校验用户身份证的正则
- \d{17}[\d|x]|\d{15}
- 3.编写校验用户邮箱的正则
- \w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
- 4.编写校验用户QQ号的正则
- [1-9]([0-9]{5,11})