python正则表达式是一种用来描述字符串匹配规则的特殊字符序列,它可以快速完成字符串的查找、替换、校验等操作,避免了手动编写复杂逻辑遍历字符串的麻烦。python通过内置的re模块提供了正则表达式的完整支持,不需要额外安装第三方库就能直接使用。

正则表达式基本概念
正则表达式中包含普通字符和特殊字符两种类型。普通字符就是常规的文字、数字、符号,匹配时直接对应相同内容;特殊字符则带有特定含义,比如d表示匹配任意数字,w表示匹配字母、数字、下划线,.表示匹配除换行符外的任意单个字符。
常见的特殊字符规则还有:
*:匹配前面的字符0次或多次+:匹配前面的字符1次或多次?:匹配前面的字符0次或1次[]:匹配括号内的任意一个字符,比如[a-z]匹配任意小写字母^:匹配字符串的开头,在[]内时表示取反$:匹配字符串的结尾
re模块核心函数用法
re.match() 从开头匹配
该函数会从字符串的起始位置开始匹配正则表达式,如果开头不匹配就返回None,匹配成功则返回匹配对象。
import re
# 匹配开头的数字
pattern = r"d+"
text = "123abc456"
result = re.match(pattern, text)
if result:
print("匹配到的内容:", result.group()) # 输出 123
else:
print("开头不匹配")
re.search() 全局查找第一个匹配
该函数会扫描整个字符串,返回第一个匹配到正则表达式的结果,不管匹配内容在字符串的什么位置。
import re
# 查找字符串中的第一个数字序列
pattern = r"d+"
text = "abc123def456"
result = re.search(pattern, text)
if result:
print("找到的第一个数字:", result.group()) # 输出 123
re.findall() 查找所有匹配
该函数会返回字符串中所有匹配正则表达式的内容,结果以列表形式返回,如果没有匹配到则返回空列表。
import re
# 提取字符串中的所有数字
pattern = r"d+"
text = "订单号123,金额456,数量789"
result = re.findall(pattern, text)
print("所有数字:", result) # 输出 ['123', '456', '789']
re.sub() 替换匹配内容
该函数会把字符串中所有匹配正则表达式的内容替换为指定内容,返回替换后的新字符串。
import re
# 把字符串中的所有数字替换为*
pattern = r"d+"
text = "我的电话是13800138000,备用号13900139000"
new_text = re.sub(pattern, "*", text)
print("替换后:", new_text) # 输出 我的电话是*,备用号*
re.compile() 预编译正则
如果同一个正则表达式需要多次使用,可以先用re.compile()预编译成正则对象,后续调用时效率更高。
import re # 预编译正则 pattern_obj = re.compile(r"d+") text1 = "abc123" text2 = "def456" print(pattern_obj.findall(text1)) # 输出 ['123'] print(pattern_obj.findall(text2)) # 输出 ['456']
使用注意事项
首先要注意转义问题,正则中的特殊字符如果要匹配本身的含义,需要加反斜杠转义,比如要匹配.本身,需要写成.。在python字符串中,反斜杠本身也需要转义,所以通常建议给正则表达式字符串加r前缀,变成原始字符串,避免多层转义的麻烦。
其次,匹配对象的方法中,group()默认返回整个匹配的内容,如果正则中有括号分组,还可以通过group(1)、group(2)获取对应分组的内容。
最后,复杂的正则表达式可读性较差,编写时可以适当添加注释,正则中(?#注释内容)的语法可以添加注释,方便后续维护。