正则表达式:普通字符和元字符构成的字符串,描述一类字符串规则
match() 从左往右匹配,匹配了就返回结果,如果匹配不上就会None
findall() 匹配上的都会放到列表里面去
元字符: 匹配单个字符
. 表示任意一个字符,但是除了\n
\d 表示0-9之间任意一个数字
\D 表示 非数字
\s 表示 空白 \n \t
\S 表示 非空白
\w 表示 英文字母,数字,下划线
\W 和\w相反
# [\d\D] 数字 或者 非数字 =》 任意字符
字符集:同样只能匹配单个字符,使用中括号来表示,表示一个字符范围
import re
# \d 0~9
print(re.match('[0123456789]', 'zc')) # 属于0123456789 都复合
print(re.match('[A-z]', 'zZ')) # 全体字母
print(re.match('[0-9]', '3A')) # 匹配 0-9范围内的数字
print(re.match('[^a-e]', 'f')) # 匹配a-e以外的字符串
数量符号
* 匹配前一个字符的任意次数,包括0次
+ 匹配前一个字符重复匹配1次以上的 >=1
t = ''
res = re.match('\w*',t)
print(res)
res = re.match('\w+',t) #
print(res)
? 匹配前一个字符出现0次或者1次
{m} 匹配前一个字符的m次数
{m,} 至少匹配m次数以上
{m,n} 至少匹配m次以上, n次以下
t = '18528322390'
res = re.match('\d*',t)
print(res)
res = re.match('\d+',t) # 贪婪模式
print(res)
res = re.match('\d?',t) # 贪婪模式
print(res)
res = re.match('\d{3,6}',t)
"""
\d\d\d
\d\d\d\d
\d\d\d\d\d
\d\d\d\d\d\d
"""
1.3边界处理
边界就是开始和结尾
^ 开始 ps: 注意这个不是表示取反,取反只在 [] 叫做取反
$ 结束
# 电话
# 长度是11位
# 第一位 [1]
# 第二位 [358]
# 第三位 [56789]
t = '18528322390'
res = re.match('^[123][358][56789]\d{8}$',t)
print(res)
# 第一种情况 首位是0
# 0[1-9] 01 02 03 04 05 06 07 08 09
# 1[0-2] 10 11 12
或者 | shift + \
t = "9999-00-14"
print(re.match('\d{4}-(0[1-9]|1[0-2])-\d{2}',t))
() 起到一个分组的作用
res = re.match('(\d{4})-(0[1-9]|1[0-2])-(\d{2})',t)
print(res.group(1))
print(res.group(2))
print(res.group(3))
print(res.groups())
\1 和第一个分组中的内容相同
\2 和第二个分组中的内容相同
xml = "hello "
res = re.match(r'<(\w+)>(.*)(\1)>', xml)
print(res)
取别名 (?P<名字>)
(?P=名字)
xml = "hello "
res = re.match(r'<(?P\w+)>(.*)(?P=tag)>' , xml)
print(res)