Python教程

Python 正则表达式指南

本文主要是介绍Python 正则表达式指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、正则表达式基础

A. 正则表达式的概念与用途

正则表达式(Regular Expression)是用于文本匹配的强大工具,常用于模式搜索、替换及解析文本。Python 的 re 模块为开发者提供了便利的接口,以完成丰富多样的文本操作任务。

B. Python 中的 re 模块简介

Python 的 re 模块包含了全面的正则表达式功能,包括模式编译、匹配搜索、替换及分组等操作。通过 re 模块,开发者能够灵活运用正则表达式进行字符串处理。

C. re 模块的主要功能与方法

  • 编译正则表达式:使用 re.compile() 函数将字符串转换为正则表达式对象,以便重复使用。
  • 查找匹配re.match() 从字符串的开头匹配,re.search() 在整个字符串中搜索匹配,re.fullmatch() 确保整个字符串完全匹配。
  • 检索与替换re.findall() 返回所有匹配项,re.finditer() 返回匹配项迭代器,re.sub() 替换匹配的文本,re.subn() 除替换外还返回替换后的字符串长度。
  • 特殊字符与字符类:使用特殊字符和字符类定义模式,如 [a-z] 匹配所有小写字母,[0-9] 匹配所有数字等。

D. 正则表达式修饰符与标志

re 模块支持多种修饰符与标志,如 re.I 忽略大小写匹配,re.M 多行模式匹配,re.S 将点 . 匹配包括换行符在内的任何字符,这些特性能显著扩展正则表达式的灵活性与适用性。

二、Python 中的正则表达式应用

A. Python 关键字和特殊字符匹配

利用正则表达式识别 Python 中的关键字、特殊字符与符号,适用于代码分析与文本解析场景。

B. 查找与匹配方法

1. re.match 函数使用案例

import re

pattern = 'www'
print(re.match(pattern, 'www.runoob.com').span())

2. re.search 函数使用案例

import re

line = "Cats are smarter than dogs"
searchObj = re.search(r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
    print("搜索整个字符串:", searchObj.group())
    print("匹配的组1:", searchObj.group(1))
    print("匹配的组2:", searchObj.group(2))
else:
    print("无匹配结果")

3. re.fullmatch 函数使用案例

import re

line = "Cats are smarter than dogs"
matchObj = re.fullmatch(r'[A-Z][a-z]* [a-z]+', line)
if matchObj:
    print("完整匹配字符串:", matchObj.group())
else:
    print("不匹配")

C. 检索与替换方法

1. re.findall 函数使用案例

import re

phone = "2004-959-559 # 这是一个国外电话号码"
num = re.findall(r'#.*$', phone)
print("电话号码是: ", num)

2. re.finditer 函数使用案例

import re

line = "Cats are smarter than dogs"
it = re.finditer(r"\d+", line)
for match in it:
    print(match.group())

3. re.sub 函数使用案例

import re

s = 'A23G4HFD567'
print(re.sub(r'#.*$', "", s))
print(re.sub(r'\D', "", s))

4. re.subn 函数使用案例

import re

def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))

D. 字符串分割方法

1. re.split 函数使用案例

import re

sp1 = re.split('\d+', 'I5am5Superman', maxsplit=0)
print(sp1)

三、正则表达式实战应用

A. 网页文本提取:解析HTML

通过正则表达式解析 HTML 代码,提取特定内容如标题、链接等。

B. 数据清洗:去除特殊字符与格式化文本

清洗数据时,去除不需要的字符、格式化文本以满足特定需求。

C. 密码验证:检查用户输入的密码是否符合规则

验证用户输入的密码是否符合特定规则,如长度、字符类型等。

D. 文件名解析:从文件路径中提取文件名与扩展名

解析文件路径,提取文件名和扩展名,便于后续处理或操作。

四、正则表达式高级技巧

A. 匹配目标与多组匹配

通过使用括号来定义子组,实现细化的匹配和文本提取。

B. 贪婪与非贪婪匹配:.* 与 .*?

采用非贪婪匹配策略以更精确地控制匹配结果。

C. 重复匹配与量词

使用量词如 *+? 来定义重复模式,提高匹配的灵活性。

五、总结与实战代码分享

A. 实战代码片段

import re

html = '''
<li>排行:<span>(.*?)</span></li>
<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="(.*?)" alt="(.*?)" />
<a title="(.*?)" href="(.*?)" class="songlist__artist">(.*)</a>
<div class="songlist__time">(.*?):</div>
'''

pattern = re.compile(html, re.S)
data = pattern.findall(html)
for d in data:
    print('排名:', d[0], '链接:', d[1], '歌名:', d[2], '歌手:', d[3], '歌曲链接:', d[4], '时间:', d[5])

B. 实战代码运行结果

根据具体HTML内容,输出会显示提取的排名、链接、歌名、歌手、歌曲链接和时间等信息。

C. 实战代码的说明与解释

这段代码利用正则表达式解析HTML,匹配关键元素并提取所需信息。通过理解模式匹配与分组,实现有效数据提取,适用于网页内容分析与数据抓取场景。

这篇关于Python 正则表达式指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!