正则表达式和re模块

发布时间 2023-04-10 17:30:49作者: 同淋雪

正则表达式和re模块

一、正则表达式

1、常用元字符

.    匹配除换行符以外的任意字符
\w   匹配字母或数字或下划线
\s   匹配任意的空白符
\d   匹配任意的数字
\n   匹配一个换行符
\t   匹配一个制表符

^    匹配字符串的开始
$    匹配字符串的结尾

\W   匹配非字母或数字或下划线
\D   匹配非数字
\S   匹配非空白符
a|b  匹配匹配字符a或b
()   匹配括号内的表达式,也表示一个组
[]   匹配字符组中的字符
[^]  匹配除了字符组中的所有字符

2、量词

控制前面的元字符出现的次数

*      重复重复重复重复零次或更多次
+      重复重复重复一次或更多次
?     重复重复零次或一次
{n}    重复n次
{n,m}  重复n到m次

3、贪婪匹配和惰性匹配

.*     贪婪匹配(尽可能的匹配更多的结果)
.*?    惰性匹配(只匹配第一个结果)

二、re模块

# 匹配所有符合的结果
res = re.findall(r"目标内容","原始字符串")  # 为防止与转义字符混淆,使用r标记正则表达式

# 生成迭代器
res = re.finditer(r"","")  # res是一个迭代器
for item in res:
    print(item.group())  # item.group()提取数据

# 匹配第一个符合的结果
res = re.search(r"","")
print(res.group())

# 从字符串的开头进行匹配
res = re.match(r"","")

# 预加载正则表达式
obj = re.compile(r"")
# 使用加载好的正则
res = obj.findall(r"","")

# (?P<名字>正则) 为匹配结果取名

# 分组
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>)  # 只提取出()的匹配结果