前言
正则表达式不是一种编程语言,而是一种可以用于各种编程语言的文本格式,通常用来检索某个符合要求格式的文本。
举例:判断用户输入的手机号是否符合规范(总共11位,纯数字,开头数字是常见的13 15 17 18 19)
phone = input('请输入您的手机号:').strip()
# 判断用户输入的手机号是否是纯数字
if phone.isdigit():
# 判断长度是否是11位
if len(phone) == 11:
# 判断是否以13 15 17 18 19电话号码开头
if phone.startswith('13') or phone.startswith('15') or phone.startswith(
'17') or phone.startswith('18') or phone.startswith('19'):
print('手机号是合法的')
print(int(phone))
else:
print('手机号开头数字错误')
else:
print('手机号必须是11位')
else:
print('手机号必须是纯数字')
如果改成使用正则表达式
import re
phone = input('请输入手机号:').strip()
if re.match('^[13|15|17|18|19][0-9]{9}',phone):
print(phone)
else:
print('手机号不合法')
所以正则表达式的作用就是用更简便的方式去筛选符合条件的数据。
正则表达式的线上测试网站
在网站中可以测试正则表达式的输入是否错误以及结果
字符组
字符组用于修饰数据的条件范围,使用方括号区分每个不同的条件。
在没有修饰的情况下,每个方括号针对一个数据值。
[0-9] # 代表0-9之间任意一个数字
[A-Z] # 代表A-Z之间任意一个字母
[a-z] # 代表a-z之间任意一个字母
[0-9a-zA-Z] #代表任意一个数字和字母
特殊符号
特殊符号用于规定强制匹配范围。
在没有修饰的情况下,每个特殊符号针对后面一个数据值。
. #匹配除了换行符以外的字符
.w #只匹配字母数字和下划线
.W #只匹配字母数字和下划线以外的字符
.d #只匹配数字
^ #只匹配字符串的开头
$ #只匹配字符串的结尾
a|b #只匹配字符a或b
() #给表达式分组,不影响匹配
[] #匹配括号内的字符
[^] #匹配括号内以外的字符
量词
量词用于规定字符组连续匹配字符串的个数
在没有修饰的情况下,每个量词针对前面一个数据值。
* #重复匹配0次或者多次(默认为多次)
+ #重复匹配1次或者多次(默认为多次)
? #只匹配0次或1次(默认为1次)
{n} #重复匹配n次
{n,} #重复n次或者多次
{n,m} #重复n次到m次
贪婪匹配
在使用量词进行控制匹配数量时,默认会进行贪婪匹配,贪婪匹配是尽可能多地匹配字符个数。
相反可以在量词后面添加?变成非贪婪匹配,非贪婪匹配会选择尽可能少地匹配字符个数。
字符'1211232312312121'
使用贪婪匹配<.*>
结果为'1211232312312121'
使用飞贪婪匹配<.*?>
结果为''
转义
在正则表达式中因为斜杠加字母拥有特殊用途,当需要作为字符使用时,可以使用\来转成普通字符。
在python中可以使用r''
\n 改成 \\n