在 Python 中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、搜索、替换等操作。无论是数据清洗、文本解析还是复杂的文本处理任务,正则表达式都能轻松应对。今天,就让我们一起深入学习 Python 中的正则表达式,掌握其基本用法和实战技巧。
一、正则表达式基础
(一)什么是正则表达式?
正则表达式是一种特殊的文本字符串,用于描述字符串的模式。它由一系列字符和特殊符号组成,用于匹配符合特定规则的字符串。
(二)常见正则表达式符号
.
:匹配任意单个字符(除换行符外)*
:匹配前面的元素零次或多次+
:匹配前面的元素一次或多次?
:匹配前面的元素零次或一次^
:匹配字符串的开头$
:匹配字符串的结尾[ ]
:匹配方括号内的任意一个字符[^ ]
:匹配不在方括号内的任意一个字符\d
:匹配任意数字\w
:匹配任意字母或数字(等价于[a-zA-Z0-9_]
)\s
:匹配任意空白字符(等价于[ \t\n\r\f\v]
)
二、Python 中的正则表达式模块
Python 提供了一个内置模块 re
,用于处理正则表达式。re
模块提供了丰富的函数和方法,用于执行正则表达式操作。yra2
(一)常用函数
re.match()
:从字符串的开头开始匹配正则表达式。re.search()
:在字符串中搜索正则表达式。re.findall()
:返回所有匹配的子串。re.finditer()
:返回一个迭代器,每次返回一个匹配对象。re.sub()
:替换字符串中的匹配部分。re.split()
:根据正则表达式分割字符串。
(二)示例代码
import re# 匹配字符串开头
pattern = r'^Hello'
text = "Hello, World!"
match = re.match(pattern, text)
if match:print("匹配成功:", match.group())
else:print("匹配失败")# 搜索字符串
pattern = r'World'
text = "Hello, World!"
match = re.search(pattern, text)
if match:print("匹配成功:", match.group())
else:print("匹配失败")# 查找所有匹配的子串
pattern = r'\d+'
text = "123 apples, 456 oranges, 789 bananas"
matches = re.findall(pattern, text)
print("所有匹配的子串:", matches)# 替换字符串中的匹配部分
pattern = r'\d+'
text = "123 apples, 456 oranges, 789 bananas"
result = re.sub(pattern, 'X', text)
print("替换后的字符串:", result)# 根据正则表达式分割字符串
pattern = r'\s+'
text = "Hello, World! This is a test."
result = re.split(pattern, text)
print("分割后的字符串:", result)
三、正则表达式实战技巧
(一)提取电子邮件地址
import retext = "Contact us at support@example.com or sales@example.org."
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text)
print("提取的电子邮件地址:", emails)
(二)提取电话号码
import retext = "Call us at +1 (123) 456-7890 or +44 9876 543210."
pattern = r'\+\d{1,3} \(\d{3}\) \d{3}-\d{4}|\+\d{2} \d{4} \d{6}'
phones = re.findall(pattern, text)
print("提取的电话号码:", phones)
(三)验证密码强度
import redef validate_password(password):pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$'if re.match(pattern, password):return Truereturn Falsepassword = "StrongP@ssw0rd"
if validate_password(password):print("密码强度合格")
else:print("密码强度不合格")
(四)提取 HTML 标签
import rehtml_text = "<html><head><title>Test</title></head><body><p>Hello, <b>World!</b></p></body></html>"
pattern = r'<[^>]+>'
tags = re.findall(pattern, html_text)
print("提取的 HTML 标签:", tags)
四、正则表达式的性能优化
(一)预编译正则表达式
如果需要多次使用同一个正则表达式,可以使用 re.compile()
预编译正则表达式,提高性能。b班不上
import repattern = re.compile(r'\d+')
text = "123 apples, 456 oranges, 789 bananas"
matches = pattern.findall(text)
print("所有匹配的子串:", matches)
(二)使用非贪婪匹配
默认情况下,正则表达式是贪婪的,会尽可能多地匹配字符。使用非贪婪匹配可以减少匹配的字符数,提高性能。SkylineWebcams
import retext = "123 apples, 456 oranges, 789 bananas"
pattern = r'\d+?' # 非贪婪匹配
matches = re.findall(pattern, text)
print("所有匹配的子串:", matches)
(三)避免过度使用正则表达式
正则表达式虽然强大,但过度使用会降低代码的可读性和性能。在可能的情况下,尽量使用简单的字符串操作方法。ddyx
五、总结
通过本文的介绍,你已经全面掌握了 Python 中的正则表达式,从基础概念到实战技巧。以下是关键点总结:
- 正则表达式基础:了解正则表达式的常见符号和规则。
- 常用函数:
re.match()
、re.search()
、re.findall()
、re.finditer()
、re.sub()
、re.split()
。 - 实战技巧:提取电子邮件地址、电话号码,验证密码强度,提取 HTML 标签。
- 性能优化:预编译正则表达式,使用非贪婪匹配,避免过度使用正则表达式。