正则表达式(Regular Expressions,简称 Regex)是一种用于匹配和操作文本的工具。通过正则表达式,用户可以对字符串进行搜索、替换、分割等操作。在 Python 中,正则表达式的使用由 re 模块提供支持。小编将介绍 Python 中正则表达式的基本使用方法及其常见操作。
1. 导入 re 模块
在使用 Python 中的正则表达式之前,必须导入 re 模块。re 模块提供了处理正则表达式的各种功能。
pythonCopy Codeimport re
2. 正则表达式的基本语法
正则表达式由普通字符(如字母、数字)和特殊字符组成,特殊字符可以用来定义更复杂的匹配规则。常见的正则表达式语法包括:
.:匹配任何字符(除换行符外)
^:匹配字符串的开头
$:匹配字符串的结尾
[]:匹配方括号内的字符
|:表示逻辑“或”
*:匹配前一个字符零次或多次
+:匹配前一个字符一次或多次
?:匹配前一个字符零次或一次
{n}:匹配前一个字符正好 n 次
{n,}:匹配前一个字符至少 n 次
{n,m}:匹配前一个字符至少 n 次,至多 m 次
():用于分组
\d:匹配任何数字,等同于 [0-9]
\w:匹配字母、数字和下划线,等同于 [a-zA-Z0-9_]
\s:匹配任何空白字符(如空格、换行符、制表符等)
3. 常见的 re 模块函数
Python 中的 re 模块提供了一些函数来进行正则表达式操作。以下是几个常用的函数:
3.1 re.match()
re.match() 从字符串的开始位置开始匹配,如果开头匹配成功,则返回一个匹配对象。否则,返回 None。
pythonCopy Codeimport re
pattern = r"hello"
text = "hello world"
match = re.match(pattern, text)
if match:
print("匹配成功!")
else:
print("匹配失败!")
输出:
Copy Code匹配成功!
3.2 re.search()
re.search() 在整个字符串中搜索第一个匹配的结果。如果找到匹配项,则返回一个匹配对象,否则返回 None。
pythonCopy Codeimport re
pattern = r"world"
text = "hello world"
search = re.search(pattern, text)
if search:
print("匹配成功!")
else:
print("匹配失败!")
输出:
Copy Code匹配成功!
3.3 re.findall()
re.findall() 用于查找字符串中所有与正则表达式匹配的部分,并以列表的形式返回匹配的结果。
pythonCopy Codeimport re
pattern = r"\d+" # 匹配数字
text = "I have 2 apples and 5 bananas"
matches = re.findall(pattern, text)
print(matches)
输出:
Copy Code['2', '5']
3.4 re.sub()
re.sub() 用于替换字符串中所有与正则表达式匹配的部分。它的第一个参数是正则表达式,第二个参数是替换的内容,第三个参数是原始字符串。
pythonCopy Codeimport re
pattern = r"\d+" # 匹配数字
text = "I have 2 apples and 5 bananas"
result = re.sub(pattern, "X", text)
print(result)
输出:
Copy CodeI have X apples and X bananas
3.5 re.split()
re.split() 根据正则表达式分割字符串,返回一个列表。它的第一个参数是正则表达式,第二个参数是要分割的字符串。
pythonCopy Codeimport re
pattern = r"\s+" # 匹配一个或多个空白字符
text = "I have 2 apples and 5 bananas"
result = re.split(pattern, text)
print(result)
输出:
Copy Code['I', 'have', '2', 'apples', 'and', '5', 'bananas']
4. 正则表达式示例
4.1 匹配电子邮件地址
一个简单的电子邮件地址的正则表达式可以如下:
pythonCopy Codeimport re
pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = "example@domain.com"
match = re.match(pattern, email)
if match:
print("有效的电子邮件地址")
else:
print("无效的电子邮件地址")
输出:
Copy Code有效的电子邮件地址
4.2 匹配日期格式
假设我们需要匹配格式为 YYYY-MM-DD 的日期字符串,可以使用以下正则表达式:
pythonCopy Codeimport re
pattern = r"^\d{4}-\d{2}-\d{2}$"
date = "2025-03-19"
match = re.match(pattern, date)
if match:
print("匹配成功,日期格式正确")
else:
print("日期格式不正确")
输出:
Copy Code匹配成功,日期格式正确
4.3 匹配电话号码
假设我们要匹配一个简单的电话号码,格式为 (XXX) XXX-XXXX:
pythonCopy Codeimport re
pattern = r"^\(\d{3}\) \d{3}-\d{4}$"
phone_number = "(123) 456-7890"
match = re.match(pattern, phone_number)
if match:
print("有效的电话号码")
else:
print("无效的电话号码")
输出:
Copy Code有效的电话号码
5. 正则表达式的优化和注意事项
贪婪与非贪婪匹配:正则表达式默认是贪婪的,即它会尽可能多地匹配字符。要实现非贪婪匹配,可以使用 ? 来修改行为。
示例:<.*?> 是一个非贪婪匹配,它会尽量少地匹配字符。
转义字符:正则表达式中有许多特殊字符,如果你想匹配这些特殊字符本身,需要进行转义。例如,. 是一个特殊字符,如果你想匹配实际的点(.),需要使用 \.。
性能优化:复杂的正则表达式可能会影响程序性能,特别是在大文本中搜索时。使用简洁有效的正则表达式有助于提高性能。
Python 中的正则表达式功能强大,可以用于文本匹配、查找、替换、分割等操作。通过 re 模块,用户可以高效地对字符串进行复杂的模式匹配操作。掌握正则表达式的基本语法和 Python 中 re 模块的常见方法,可以让你在文本处理、数据清理等方面变得更加得心应手。