正则表达式的概念
_正则表达式本质上就是使用一些符号的组合产生特殊的含义去字符串中筛选出符合条件的数据
# 正则表达式
# 编写代码校验用户输入的手机号码是否合法
import re
num = input('请输入您的手机号码》》》:').strip()
if re.match('^[13|15|17|18|19][0-9]{9}',num):
print(num)
else:
print('输入不合法')
------------
# python代码
num = input('请输入您的手机号码》》》:').strip()
# 判断用户输入的手机号码是否是纯数字
if num.isdigit():
# 判断用户输入的手机号是否是11位数
if len(num) == 11:
# 判断输入的手机号码是否是常见的以13,15,17,18,19开头的
if num.startswith('13') or num.startswith('15') or num.startswith('17') or num.startswith('18') or num.startswith('19'):
print(int(num))
else:
print('手机号码开头不对')
else:
print('手机号码必须是11位数字')
else:
print('手机号码必须是纯数字')
正则表达式之字符组
正则表达式在线测试网址
在线测试工具 http://tool.chinaz.com/regex/
字符组内容
# 字符组在没有任何量词修饰的前提下,一次只针对一个数据值
------------
[0-9] 匹配0到9之间的任意一个数字(包括0和9)
全称是:[0123456789]
[A-Z] 匹配A到Z之间的任意一个字母(包括A和Z)
全称是:[ABCD...WXYZ]
[a-z] 匹配A到Z之间的任意一个字母(包括a和z)
全称是:[abcd...wxyz]
在中括号内编写的多个数据值彼此都是或的关系
[0-9a-zA-Z]
数字、小写字母、大写字母都可以
正则表达式之特殊符号
#特殊符号在没有量词修饰的情况下,一次只针对一个数据值
------------
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\W 匹配非字母或数字或下划线
\d 匹配数字
^ 匹配字符串的开头
$ 匹配字符串的结尾
ps:^与$的组合能够明确的限制想要查找的具体数据 ^9$
a|b 匹配字符a或字符b
ps:管道符|在很多场景下的意思都是或
() 给正则表达式分组 不影响正则表达式的匹配
ps:用于后续的正则起别名 分组获取对应数据
[] 匹配字符组中的字符
[^] 匹配除了字符组中字符的所有字符
正则表达式之量词
# 在正则表达式中所有的量词默认都是贪婪匹配
量词不可以单独使用 必须要跟在表达式后面 而且只能影响表达式左边的那个数据
* 重复零次或更多次(默认就是尽可能多)
+ 重复一次或更多次(默认就是尽可能多)
? 重复零次或一次(默认就是一次)
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
正则表达式之练习题
海. 海燕海鸥海豚 结果 海燕 海鸥 海豚
------------
^海. 海燕海鸥海豚 结果 海燕
------------
豚$ 海燕海鸥海豚 结果 豚
------------
海.$ 海燕海鸥海豚 结果 海豚
------------
海.* 海燕海鸥海豚 结果 海燕海鸥海豚
------------
海[^和]* 海燕海鸥海豚 结果 海燕海鸥海豚
------------
海[鸥]* 海燕海鸥海豚 结果 海 海鸥 海
贪婪匹配与非贪婪匹配
# 贪婪匹配
表达式 :<.*>
文本 :<海燕>海鸥(123)<海豚>
结果 :<海燕>海鸥(123)<海豚>
------------
# 非贪婪匹配
表达式 :<.*?>
文本 :<海燕>海鸥(123)<海豚>
结果: <海燕> <海豚>
##所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
\\n \n
\\\\n \\n
在python中有更加简便的写法
r'\n'
r'\\n'
正则表达式之实战
#编写校验用户手机号的正则
0?(13|14|15|17|18|19)[0-9]{9}
------------
#编写校验用户身份证的正则
\d{17}[\d|x]|\d{15}
------------
#编写校验用户邮箱的正则
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
------------
#编写校验用户qq号的正则
[1-9]([0-9]{5,11})