Python 正则表达式(Regular Expressions,简称 RegEx)是用于模式匹配和字符串操作的强大工具。通过预定义的模式,Python 正则表达式可以快速地搜索、匹配和操作文本。无论你是验证用户输入、解析数据还是从大量文本文件中提取信息,Python 正则表达式都能显著提升你的编程能力。
本文将帮助你熟练掌握 Python 正则表达式,介绍其基础知识、工作原理,并提供实际应用示例。通过本文的学习,你将具备在各种实际应用中使用正则表达式的技能,提高编程的有效性和效率。
Python 中的正则表达式模块 (re
)
Python 的 re
模块提供了一组用于处理正则表达式的函数。它使你能够使用特定的模式来搜索、匹配和操作文本。以下是 re
模块的主要概念和功能:
1. 导入模块
在使用正则表达式函数之前,需要导入 re
模块:
import re
2. 基本函数
-
search()
:在字符串中搜索匹配项,并返回一个匹配对象(如果找到)。match = re.search(r'\d+', 'There are 123 apples') print(match.group()) # 输出: 123
-
match()
:检查字符串的开头是否与模式匹配。match = re.match(r'Hello', 'Hello, world!') print(match.group()) # 输出: Hello
-
findall()
:查找字符串中所有匹配项,并返回一个匹配项列表。matches = re.findall(r'\d+', '123 apples and 456 oranges') print(matches) # 输出: ['123', '456']
-
sub()
:将匹配项替换为指定的字符串。result = re.sub(r'apples', 'bananas', 'I like apples') print(result) # 输出: I like bananas
3. 特殊字符
.
(点号):匹配除换行符以外的任何单个字符。^
(脱字符):匹配字符串的开始。$
(美元符号):匹配字符串的结束。[]
(方括号):匹配方括号内的任何一个字符。\
(反斜杠):转义特殊字符或表示特定序列。
4. 特殊序列
\d
:匹配任何数字。\D
:匹配任何非数字字符。\s
:匹配任何空白字符(如空格、制表符、换行符)。\S
:匹配任何非空白字符。\w
:匹配任何字母数字字符(包括下划线)。\W
:匹配任何非字母数字字符。
5. 量词
*
:匹配前面的模式零次或多次。+
:匹配前面的模式一次或多次。?
:匹配前面的模式零次或一次。{n}
:精确匹配前面的模式 n 次。{n,}
:匹配前面的模式至少 n 次。{n,m}
:匹配前面的模式至少 n 次,最多 m 次。
6. 编译模式
为了提高性能,特别是对于多次使用的模式,可以使用 re.compile()
编译正则表达式模式。
pattern = re.compile(r'\d+')
matches = pattern.findall('123 apples and 456 oranges')
print(matches) # 输出: ['123', '456']
实际应用示例
验证用户输入
def validate_email(email):
pattern = re.compile(r'^[\w\.-]+@[\w\.-]+\.\w+$')
return bool(pattern.match(email))
print(validate_email('[email protected]')) # 输出: True
print(validate_email('invalid-email')) # 输出: False
解析日志文件
log_line = '2023-10-01 12:34:56 INFO User logged in'
pattern = re.compile(r'(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) (.+)')
match = pattern.search(log_line)
if match:
date, time, message = match.groups()
print(f'Date: {
date}, Time: {
time}, Message: {
message}')
# 输出: Date: 2023-10-01, Time: 12:34:56, Message: INFO User logged in
替换敏感信息
text = 'My credit card number is 1234-5678-9012-3456'
pattern = re.compile(r'\d{4}-\d{4}-\d{4}-\d{4}')
redacted_text = pattern.sub('XXXX-XXXX-XXXX-XXXX', text)
print(redacted_text) # 输出: My credit card number is XXXX-XXXX-XXXX-XXXX
如何在 Python 中使用正则表达式(RegEx)
要在 Python 中搜索、匹配和编辑字符串,你需要导入 re
模块并使用其提供的函数来创建正则表达式(RegEx)。以下是一些使用正则表达式的指令和示例。
1. 导入 re
模块
首先,需要导入 re
模块:
import re
2. 使用 search()
函数
search()
函数在字符串中搜索匹配项,并返回一个匹配对象(如果找到)。
import re
text = "The price is 123 dollars"
match = re.search(r'\d+', text)
if match:
print("Found a match:", match