1、三种类型的函数,match(从首字符开始比较), search(从左到右,找出第一个符合的字符串,并返回下标), findall(扫描整个字符串,返回所有符合的字符串)
2、flags:标志位,用于控制正则表达式的匹配方式,值如下:
re.I 忽略大小写
re.L 做本地户识别
re.M 多行匹配,影响^和$
re.S 匹配包含换行符在内的所有字符串
re.U 根据Unicode字符集解析字符,影响\w \W \b \B
re.x 使我们以更灵活的方式理解正则表达式
功能:尝试从字符串的气势位置匹配,如果匹配不上返回None
3、匹配类型:
‘.’ 匹配除换行符以外的任意字符
[0123456789] 匹配方括号中的任意字符
[a-z] 匹配任意小写字母
[A-Z] 匹配任意大写字母
[0-9a-zA-Z_] 匹配任意数字、字母、下划线 ,效果同\w
[^sunck] 匹配除了sunck之外的所有字符
\d 匹配数字,效果同[0-9]
\D 匹配非数字字符,效果同[^0-9]
o* 尽可能多的匹配o,即,找出o或o+,例.* 可以拿出所有字符
*?、+?、x? 最小匹配,解决贪婪匹配的问题
4、案例
a、匹配java中的多行注释
str = '/* part1 */ /* part2 */'
print(re.findall(r'//*.*?/*/',str))
b、判断手机号码
pn = re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$')
while True:
phonenumber = input('请输入您的手机号:')
test = re.search(pn, phonenumber)
if test:
print('正常手机号')
else:
print('不是手机号')