【python】正则表达式匹配数据


前言

使用正则表达式处理数据,可进行字符串匹配、提取和替换等操作。在python中,通过re库完成正则匹配的操作。


一、正则语法规则

1.常用匹配符

模式描述
^匹配字符串开头
$匹配字符串结尾
.匹配任意字符
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
[]匹配括号中列举的任意一个字符
[^]匹配除了括号中列举的字符以外的任意一个字符

2.常用匹配函数

函数 描述
re.match从开始位置开始匹配,如果开头没有则无,语法: re.match(pattern, string)
re.search搜索整个字符语法: re.search(pattern, string)
re.findall搜索整个字符串,返回一个list 语法: re.findall (pattern, string)

3.常用修饰符

修饰符描述
re.I使匹配对大小写不敏感
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.L做本地化识别(locale-aware)匹配
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

二、正则表达式的应用

1.引入库

代码如下(示例):

import re

2.提取数据

代码如下(示例):

import  re
content = '''
<div>
<a href="https://baike.baidu.com/item/%E5%B9%BF%E4%B8%9C%E7%9C%81/132473" title="广东省">广东省介绍</a>
<a href="https://baike.baidu.com/item/%E6%B1%9F%E8%A5%BF%E7%9C%81/19438118" title="江西省">江西省介绍</a>
</div>
'''
# 获取链接文本内容
part = r'<a.*?>(.*?)</a>'
topic = re.findall(part,content)
print(topic )
# 获取完整链接内容
url_part = r'<a.*?href=.*?</a>'
urls = re.findall(url_part,content,re.I|re.S|re.M)
for i in urls:
    print(i)

# 获取单个链接
res_url = r'href="(.*?)"'
url = re.findall(res_url,content,re.I|re.S|re.M)
print(url)
for i in url:
    print(i)

3.返回结果

['广东省介绍', '江西省介绍']
<a href="https://baike.baidu.com/item/%E5%B9%BF%E4%B8%9C%E7%9C%81/132473" title="广东省">广东省介绍</a>
<a href="https://baike.baidu.com/item/%E6%B1%9F%E8%A5%BF%E7%9C%81/19438118" title="江西省">江西省介绍</a>
['https://baike.baidu.com/item/%E5%B9%BF%E4%B8%9C%E7%9C%81/132473', 'https://baike.baidu.com/item/%E6%B1%9F%E8%A5%BF%E7%9C%81/19438118']
https://baike.baidu.com/item/%E5%B9%BF%E4%B8%9C%E7%9C%81/132473
https://baike.baidu.com/item/%E6%B1%9F%E8%A5%BF%E7%9C%81/19438118

在这里插入图片描述