Logo

郎哥编程

使用正则表达式

2020-09-06 351

正则表达式在网页内容提取上也非常有用,下面的案例从一个网页中提取图片的网络地址。

案例代码如下:

import re
content = """<html>
<head>
      <title>java课程</title>
</head>
<body>
       <h3>java课程</h3>
       <img src="https://www.milihua.com/002.png"  alt="Java课程"/>
       <p>课程主要介绍java基础知识</p>
       <img src="https://www.milihua.com/001.jpg"  alt="Java课程"/>
       <video src="https://www.milihua.com/001.jpg"  alt="Java课程"/>
</boyd>
<html>"""
# 创建正则对象
pattern = re.compile(r"img.*src=\"(.+?\.[a-z]+)\"")
# 识别图片链接地址
m = pattern.findall(content)
print(m)

程序执行结果如下:

['https://www.milihua.com/002.png', 'https://www.milihua.com/001.jpg']

正则表达式“img.*src=\"(.+?\.[a-z]+)\"”,从“img”开始匹配,“img”字符串后面可匹配0到任意个字符,紧跟匹配的是“src=”字符串(这里没有考虑src和=之间的空白字符),然后匹配“\"”,后面匹配的是一个子表达式(.+?\.[a-z]+),子表达式在Python语言中也称为组合,该组合的“.+?”可匹配多个任意字符,”\.[a-z]+”匹配图片的扩展名。

Python的re模块支持正则表达式,执行正则表达式时,需要导入re模块,re模块的使用请学习课程《Python零基础入门》。

使用正则表达式也可以提取网页的表格数据,下面是网页的表格内容:

<table>
           <tr>
                <th>姓名</th>
                <th>电话</th>
                <th>电子邮件</th>
                <th>职务</th>
           </tr>
           <tr>
                <td>张三</td>
                <td>18278900988</td>
                <td>zhangsan@163.com</td>
                <td>研发工程师</td>
           </tr>
          <tr>
                <td>王二</td>
                <td>16589012689</td>
                <td>wanger@163.com</td>
                <td>研发经理</td>
           </tr>
          <tr>
                <td>李四</td>
                <td>17230019065</td>
                <td>lisi@163.com</td>
                <td>研发工程师</td>
           </tr>
      </table>

使用下面的正则程序可以提取表格数据:

import re
# 创建正则对象
pattern = re.compile(r"<th>(.*)</th>")
# 提取表格标题
title = pattern.findall(content)
print(title)
# 提取表格行数据
pattern = re.compile(r"<tr>")
#表格的每行数据分隔为一个列表
entries = pattern.split(content)
# 从表格行中提取表格栏数据
for entry in entries:
    pattern = re.compile(r"<td>(.*)</td>")
    text = pattern.findall(entry)
    # 若匹配成功输出表格栏内容
    if text:
        print(text)

案例代码的content为HTML表格内容。

用正则表达式“<th>(.*)</th>”提取表格标题栏数据,表格标题栏数据被放置在一个列表title内。

调用正则对象的split()方法,使用正则表达式“<tr>”将表格数据按表格行进行分隔,分隔后表格行数据放置在列表entries内。

迭代列表entries,使用正则表达式“<td>(.*)</td>”提取表格行的栏数据。

程序执行结果如下所示:

['姓名', '电话', '电子邮件', '职务']
['张三', '18278900988', 'zhangsan@163.com', '研发工程师']
['王二', '16589012689', 'wanger@163.com', '研发经理']
['李四', '17230019065', 'lisi@163.com', '研发工程师']


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论