正则表达式就是记录文本规则的代码,是对字符串操作的一种匹配公式2.例
0d{2}-d{8}这就是一个正则表达式,表达的意思是匹配的是座机号码
0就是匹配数字0
d{2]表示两个0到9的数字
d{8]表示八个0到9的数字
3.特点
语法可读性差 通用性强,能适用于很多编程性语言2._re模块 1.re模块
# 导入re模块 import re # 使用match方法进行匹配操作 result = re.match(正则表达式,要匹配的字符串) # 如果上一步匹配到数据,用group方法提取数据 result.group()
3.匹配单个字符
| 代码 | 功能 |
|---|---|
| . | 匹配任意一个字符 |
| [ ] | 匹配[ ]中列取的字符 |
| d | 匹配数字,0到9 |
| D | 匹配非数字 |
| s | 匹配空白,即空格,Tab键 |
| S | 匹配非空白 |
| w | 匹配 非特殊字符,即a-z,A-Z,0-9,_,汉字 |
| W | 匹配 特殊字符,即非字母,非数字,非汉字 |
| 代码 | 功能 |
|---|---|
| * | 匹配前一个字符出现0次或无限次,即可有可无 |
| + | 匹配前一个字符出现一次或无限次,即至少有一次 |
| ? | 匹配前一个字符出现一次或0次,即要么有一次,要么没有 |
| {m} | 匹配前一个字符出现m次 |
| {m,n} | 匹配前一个字符出现m到n此 |
| 代码 | 功能 |
|---|---|
| ^ | 匹配字符串开头 |
| $ | 匹配字符串结尾 |
| [^指定字符] | 匹配除了指定字符 以外的所有字符 |
例子
^d 匹配以数字开头
d$ 匹配以数字结尾
使用re模块提取分组数据
| 代码 | 功能 |
|---|---|
| | | 匹配左右任意一个表达式 |
| (ab) | 将括号中字符串作为一个分组 |
| num | 引用分组num匹配到的字符串,但是使用时必须对进行转义也就是 \num |
| (?P | 分组起别名 |
| (?P=name) | 引用别名为name分组匹配到的字符串 |
在列表中["apple","banana',"orange","pear"],匹配apple和pear
import re
fruit = ["apple", "banana", "orange", "pear"]
for value in fruit:
result = re.match("apple|pear", value )
# 判断匹配是否成功
if result:
info = result.group()
print("i want eat", value )
else:
print("nonono")
运行结果
匹配出 163,126,qq等邮箱
import re
result = re.match("[a-zA-z0-9_]{4,20}@(163|126|qq).com", "hello@163.com")
info = result.group()
print(info)
案例3
匹配出qq:10567这样的数据,提取出来qq文字和qq号码
import re
# group()中无任何数字代表匹配所有的数字,group(1)代表第一个分组的数据(2)代表第二个分组的数据 顺序是从左到右依次排序
# qq:后面的号码是第2组
result = re.match("(qq):([1-9]d{4,15})" , "qq:10567")
if result:
info = result.group()
print(info)
num =result.group(2)
print(num)
type = result.group(1)
print(type)
else:
print("匹配失败")
结果
匹配出gkd
import re
# 1 引用分组1匹配到的字符串,但是用的时候需要对进行转义
result = re.match("<([a-zA-Z1-6]{4})>.*\1>" , "gkd")
if result:
info = result.group()
print(info)
else:
print("匹配失败")
案例5
匹配出www.baidu.com
import re
result = re.match("<([a-zA-Z1-6]{4})><([a-zA-Z1-6]{2})>.*\2>\1>","www.baidu.com")
if result:
info = result.group()
print(info)
else:
print("匹配失败")
案例6
匹配出www.baidu.com 分组搞得就很乱,下面用一下分组别名
import re
result = re.match("<(?P[a-zA-Z1-6]{4})><(?P[a-zA-Z1-6]{2})>.*(?P=h1)>(?P=html)>","www.baidu.com")
if result:
info = result.group()
print(info)
else:
print("匹配失败")



