该知识点不属于任何一门编程语言,是一个独立的学科,主要用于数据的查找与筛选
# 不使用正则表达式
- 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})