1. 正则表达式概述
- 历史起源:正则表达式概念源于理论计算机科学,数学家斯蒂芬・科尔尼提出的正则集和有限自动机理论奠定其基础,使其成为处理和操作文本数据的重要工具。
- 基本概念
- 组成元素:由字符(普通字符如字母、数字和特殊字符即元字符)组成,用于描述字符串模式,可进行搜索、匹配、替换和验证字符串操作。
- 元字符含义:常见元字符如
.
(匹配除换行符外任意字符)、^
(匹配字符串开头)、$
(匹配字符串结尾)、[]
(定义字符类,匹配其中任一字符)、-
(在字符类中表示范围)、*
(匹配前面元素零次或多次)、+
(匹配前面元素一次或多次)、?
(匹配前面元素零次或一次)、()
(用于捕获分组,形成子模式)。
2. 应用场景
- 文本搜索和提取:可在文本中搜索特定模式文本,如提取电话号码、电子邮件地址等,通过
re.compile
定义模式,search
或match
方法进行匹配,groups
方法提取匹配部分。 - 字符串验证:验证字符串是否符合特定格式,如检查电子邮件地址格式,通过
re.compile
定义邮箱正则表达式,match
方法验证。 - 数据清理:处理文本数据格式问题,如去除多余空格、转换日期格式、提取特定数值等,使用
re.sub
替换匹配模式的文本。 - 日志分析:从日志文件中提取关键信息,识别特定事件或错误模式,如通过定义相关正则表达式提取日期、错误信息等。
- 编程应用:在编程中广泛用于模式匹配、查找和替换,许多编程语言支持正则表达式操作,如代码搜索、替换和重构。
3. 具体应用场景示例及练习
- 文本搜索和处理
- 查找关键字:使用
re.search
在文本中查找特定关键字,如查找 “关键字”。 - 模式匹配和提取:通过
re.compile
定义复杂模式,用match
方法提取符合模式部分,如提取电话号码。 - 替换操作:利用
re.sub
搜索并替换文本中特定模式,如替换敏感词。 - 练习 1:实现
text_search_manipulation
函数,在给定文本中搜索 “expressions” 并将 “powerful” 替换为 “useful”。
- 查找关键字:使用
- 数据验证
- 电子邮件验证:定义邮箱正则表达式,用
re.match
验证输入邮箱格式,如validate_email
函数验证用户输入邮箱。 - 练习 2:
email_validation
函数验证给定字符串是否为有效电子邮件地址,可修改测试邮箱地址。
- 电子邮件验证:定义邮箱正则表达式,用
- 输入过滤
- 过滤 HTML 标签:定义匹配 HTML 标签的正则表达式,用
re.sub
将其替换为空字符串,如filter_html_tags
函数过滤用户输入 HTML 内容中的标签。 - 练习 3:
input_sanitization
函数从字符串中删除非字母数字字符,可修改测试字符串。
- 过滤 HTML 标签:定义匹配 HTML 标签的正则表达式,用
- 从文本中提取信息
- 提取日期信息:定义日期正则表达式,用
re.findall
找到文本中所有匹配日期,如extract_dates
函数提取示例文本中的日期。 - 练习 4:
extracting_information
函数从句子中提取以 “p” 开头的单词,可修改测试句子。
- 提取日期信息:定义日期正则表达式,用
- URL 匹配
- 提取 URL:定义 URL 正则表达式,用
re.findall
提取文本中所有 URL,如extract_urls
函数提取示例文本中的 URL。 - 练习 5:
url_matching
函数验证给定字符串是否为有效 URL,可修改测试 URL。
- 提取 URL:定义 URL 正则表达式,用
- 密码强度检查
- 密码强度检查:定义密码强度正则表达式,用
re.match
检查密码是否符合强度标准,如check_password_strength
函数检查示例密码强度。 - 练习 6:
password_strength_checking
函数检查给定密码是否强,可修改测试密码。
- 密码强度检查:定义密码强度正则表达式,用