01 认识正则表达式
1. 正则表达式的作用
正则表达式是一种可以让复杂的字符串问题变得简单的工具
- 问题: 判断手机号是否合法
# 方法1
tel = '123456789'
if len(tel) != 11:
print('不是合法的手机号')
else:
for i in tel:
if not i.isdigit():
print('不是合法的手机号')
break
else:
if tel[0] != '1':
print('不是合法的手机号!')
elif '3' <= tel[1] <= '9':
print('是合法的手机号')
else:
print('不合法')
# 方法2: 使用正则表达式
from re import fullmatch
tel = '123456789'
print(fullmatch(r'1[3-9]\d{9}', tel) != None)
- split
from re import split
str2 = '23+45-89-1928*233'
print(split(r'[+*-]', str2)) # ['23', '45', '89', '1928', '233']
2. fullmatch函数
- 导入
from re import fullmatch
- 语法:
fullmatch(正则表达式, 字符串) # 判断字符串和正则表达式是否完全匹配(判断整个字符串是否符合正则表达式所描述的规则),如果不符合返回None
- python提供正则表达式的方式: 直接将正则表达式作为一个字符串内容(正则需要使用引号引起来,而且引号前面一般需要加r)
02 正则表达式语法
写正则表达式都是通过正则符号来描述字符串规则
1. 匹配类符号 - 用来规定字符(用来描述对字符的要求)
1) 普通字符 - 除了特殊符号以外的符号都是普通字符(在正则中表示符号本身)
print(fullmatch(r'abc', 'abc'))
print(fullmatch(r'abc', 'abd')) # 不匹配,None
2) 特殊符号
符号 | 作用 | |
---|---|---|
① | . | 匹配任意一个字符 |
② | \d | 匹配任意一个数字字符 |
③ | \s | 匹配任意一个空白字符 空白字符: ’ ‘、’\n’、‘\t’ |
④ | \w | 匹配任意一个数字、字母、下划线或者中文 |
⑤ | \D \S \W | \D - 匹配任意一个非数字字符 \S - 匹配任意一个非空白字符 \W - 匹配任意一个非数字、字母、下划线或者中文 |
⑥ | [字符集] | 匹配字符集中任意一个字符 用法1: 在[]中提供多个普通字符, 匹配多个字符中的任意一个 用法2: [字符1-字符2], 匹配字符1到字符2范围中的任意一个字符 [5-9] : 能匹配’5’,‘6’,‘7’,‘8’,‘9’ [a-z] : 匹配任意一个小写字母 [\u4e00-\u9fa5]: 匹配任意一个中文 [a-zA-Z] : 匹配任意一个字母 用法3: 在[]中包含\开头的特殊符号 [\da-z]: 匹配任意一个数字或者任意一个小写字母 [\da-zA-Z_\u4e00-\u9fa5] == \w 注意: 中括号中的减号只有在两个字符之间的时候才表示谁到谁 |
⑦ | [^字符集] | 匹配不在字符集中的任意一个字符 [^A-Z]: |