正则表达式(Regular Expression)是一种用于模式匹配和文本处理的强大工具。在 Python 中,正则表达式通过 re
模块提供支持。本文将详细介绍 Python 中如何使用正则表达式,包括基础语法、常用函数、进阶用法及实际应用示例,帮助深入理解和高效使用正则表达式。
正则表达式基础
正则表达式由普通字符和元字符组成,通过定义特定的模式来匹配字符串。
以下是一些常见的元字符及其含义:
.
:匹配任意字符(除换行符)^
:匹配字符串的开头$
:匹配字符串的结尾*
:匹配前面的字符0次或多次?
:匹配前面的字符0次或1次{n}
:匹配前面的字符n次{n,}
:匹配前面的字符至少n次{n,m}
:匹配前面的字符至少n次,至多m次[]
:匹配方括号内的任意字符|
:匹配左边或右边的字符:转义字符,用于转义特殊字符
使用 re 模块
在 Python 中使用正则表达式,首先需要导入 re
模块。re
模块提供了几个常用函数,用于执行正则表达式操作。
re.match()
re.match()
用于从字符串的开头进行匹配,如果匹配成功,返回一个 Match
对象,否则返回 None
。
import re
pattern = r'hello'
string = 'hello world'
match = re.match(pattern, string)
if match:
print("匹配成功:", match.group())
else:
print("匹配失败")
re.search()
re.search()
用于在整个字符串中搜索第一次出现的匹配,如果匹配成功,返回一个 Match
对象,否则返回 None
。
import re
pattern = r'world'
string = 'hello world'
search = re.search(pattern, string)
if search:
print("匹配成功:", search.group())
else:
print("匹配失败")
re.findall()
re.findall()
用于查找字符串中所有与模式匹配的子串,并以列表形式返回。
import re
pattern = r'd '
string = 'hello 123 world 456'
findall = re.findall(pattern, string)
print("所有匹配项:", findall) # 输出 ['123', '456']
re.sub()
re.sub()
用于替换字符串中所有与模式匹配的子串,并返回替换后的字符串。
import re
pattern = r'd '
string = 'hello 123 world 456'
replacement = '数字'
result = re.sub(pattern, replacement, string)
print("替换结果:", result) # 输出 'hello 数字 world 数字'
re.split()
re.split()
用于按照模式匹配的子串将字符串分割,并以列表形式返回分割结果。
import re
pattern = r's '
string = 'hello world 2023'
split = re.split(pattern, string)
print("分割结果:", split) # 输出 ['hello', 'world', '2023']
正则表达式进阶
分组和反向引用
使用圆括号 ()
可以将模式中的一部分括起来,形成一个分组。分组可以通过序号进行反向引用,分组序号从1开始。
import re
pattern = r'(hello) (world)'
string = 'hello world'
match = re.match(pattern, string)
if match:
print("整体匹配:", match.group(0)) # 输出 'hello world'
print("第一个分组:", match.group(1)) # 输出 'hello'
print("第二个分组:", match.group(2)) # 输出 'world'
非贪婪匹配
默认情况下,正则表达式是贪婪的,会尽可能多地匹配字符。可以在量词后面加上 ?
实现非贪婪匹配。
import re
pattern = r'<.*?>'
string = '<div>hello</div><span>world</span>'
findall = re.findall(pattern, string)
print("非贪婪匹配结果:", findall) # 输出 ['<div>', '<span>']
编译正则表达式
可以使用 re.compile()
将正则表达式编译成一个正则表达式对象,以提高匹配效率,尤其是在需要重复使用同一个模式时。
import re
pattern = re.compile(r'd ')
string = 'hello 123 world 456'
findall = pattern.findall(string)
print("编译模式查找结果:", findall) # 输出 ['123', '456']
实际应用示例
验证电子邮件地址
正则表达式可以用于验证电子邮件地址是否有效。
代码语言:javascript复制import re
pattern = r'^[a-zA-Z0-9_. -] @[a-zA-Z0-9-] .[a-zA-Z0-9-.] $'
email = 'example@example.com'
if re.match(pattern, email):
print("有效的电子邮件地址")
else:
print("无效的电子邮件地址")
提取网页中的所有 URL
通过正则表达式,可以从网页 HTML 中提取所有 URL。
代码语言:javascript复制import re
html = '''
<html>
<head><title>Test</title></head>
<body>
<a href="http://example.com">Example</a>
<a href="https://www.test.com">Test</a>
</body>
</html>
'''
pattern = r'href="(http[s]?://[^"] )"'
urls = re.findall(pattern, html)
print("提取的 URL:", urls) # 输出 ['http://example.com', 'https://www.test.com']
替换敏感词汇
正则表达式可以用于替换文本中的敏感词汇。
代码语言:javascript复制import re
text = 'This is a bad word.'
pattern = r'bbadb'
replacement = '***'
clean_text = re.sub(pattern, replacement, text)
print("替换后的文本:", clean_text) # 输出 'This is a *** word.'
分割复杂字符串
可以使用正则表达式按照复杂的模式分割字符串,例如分割带有多种分隔符的字符串。
代码语言:javascript复制import re
string = 'apple,banana;orange|grape'
pattern = r'[;,|]'
split = re.split(pattern, string)
print("复杂分割结果:", split) # 输出 ['apple', 'banana', 'orange', 'grape']
总结
本文详细介绍了 Python 中正则表达式的基础知识、常用函数、进阶用法及其实际应用示例。正则表达式是处理字符串和文本数据的强大工具,通过掌握正则表达式,可以高效解决许多复杂的文本匹配和处理问题。希望本文对大家理解和使用正则表达式有所帮助。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!