Python正则表达式完全指南 - MorvanZhou教程解析
正则表达式(Regular Expression)是处理字符串的强大工具,Python通过re
模块提供了完整的正则表达式功能。本文将从基础到高级全面讲解Python正则表达式的使用方法。
正则表达式基础概念
正则表达式是一种特殊的字符序列,用于检查字符串是否与某种模式匹配。在Python中,我们使用re
模块来处理正则表达式。
import re
基本匹配方法
简单字符串匹配
最简单的匹配方式是直接使用字符串查找:
pattern1 = "cat"
pattern2 = "bird"
string = "dog runs to cat"
print(pattern1 in string) # True
print(pattern2 in string) # False
使用re.search()匹配
更专业的做法是使用re.search()
方法:
print(re.search(pattern1, string)) # 返回匹配对象
print(re.search(pattern2, string)) # 返回None
字符集匹配
匹配多个字符
使用方括号[]
可以匹配多个可能的字符:
# 匹配"run"或"ran"
ptn = r"r[au]n"
print(re.search(ptn, "dog runs to cat")) # 匹配到"run"
匹配字符范围
可以指定字符范围进行匹配:
print(re.search(r"r[a-z]n", "dog runs to cat")) # 匹配小写字母
print(re.search(r"r[0-9]n", "dog r2ns to cat")) # 匹配数字
print(re.search(r"r[0-9a-z]n", "dog runs to cat")) # 匹配数字或小写字母
特殊字符匹配
数字匹配
# \d 匹配数字
print(re.search(r"r\dn", "run r4n")) # 匹配"r4n"
# \D 匹配非数字
print(re.search(r"r\Dn", "run r4n")) # 匹配"run"
空白字符匹配
# \s 匹配空白字符
print(re.search(r"r\sn", "r\nn r4n")) # 匹配"r\nn"
# \S 匹配非空白字符
print(re.search(r"r\Sn", "r\nn r4n")) # 匹配"r4n"
单词字符匹配
# \w 匹配字母数字和下划线
print(re.search(r"r\wn", "r\nn r4n")) # 匹配"r4n"
# \W 匹配非单词字符
print(re.search(r"r\Wn", "r\nn r4n")) # 匹配"r\nn"
边界匹配
# \b 匹配单词边界
print(re.search(r"\bruns\b", "dog runs to cat")) # 匹配"runs"
# \B 匹配非单词边界
print(re.search(r"\B runs \B", "dog runs to cat")) # 匹配" runs "
特殊匹配模式
任意字符匹配
# . 匹配任意字符(除换行符)
print(re.search(r"r.n", "r[ns to me")) # 匹配"r[n"
行首行尾匹配
# ^ 匹配行首
print(re.search(r"^dog", "dog runs to cat")) # 匹配"dog"
# $ 匹配行尾
print(re.search(r"cat$", "dog runs to cat")) # 匹配"cat"
可选匹配
# ? 表示可选
print(re.search(r"Mon(day)?", "Monday")) # 匹配"Monday"
print(re.search(r"Mon(day)?", "Mon")) # 匹配"Mon"
重复匹配
零次或多次
# * 匹配零次或多次
print(re.search(r"ab*", "a")) # 匹配"a"
print(re.search(r"ab*", "abbbbb")) # 匹配"abbbbb"
一次或多次
# + 匹配一次或多次
print(re.search(r"ab+", "a")) # 不匹配
print(re.search(r"ab+", "abbbbb")) # 匹配"abbbbb"
指定次数范围
# {n,m} 匹配n到m次
print(re.search(r"ab{2,10}", "a")) # 不匹配
print(re.search(r"ab{2,10}", "abbbbb")) # 匹配"abbbbb"
分组和捕获
基本分组
match = re.search(r"(\d+), Date: (.+)", "ID: 021523, Date: Feb/12/2017")
print(match.group()) # 整个匹配
print(match.group(1)) # 第一个分组
print(match.group(2)) # 第二个分组
命名分组
match = re.search(r"(?P<id>\d+), Date: (?P<date>.+)", "ID: 021523, Date: Feb/12/2017")
print(match.group('id')) # 通过名称访问
print(match.group('date')) # 通过名称访问
高级操作
查找所有匹配
# re.findall() 查找所有匹配
print(re.findall(r"r[ua]n", "run ran ren")) # ['run', 'ran']
替换匹配内容
# re.sub() 替换匹配内容
print(re.sub(r"r[au]ns", "catches", "dog runs to cat")) # "dog catches to cat"
分割字符串
# re.split() 按模式分割
print(re.split(r"[,;\.]", "a;b,c.d;e")) # ['a', 'b', 'c', 'd', 'e']
预编译正则表达式
# 预编译正则表达式提高效率
compiled_re = re.compile(r"r[ua]n")
print(compiled_re.search("dog ran to cat")) # 匹配"ran"
总结
本文全面介绍了Python正则表达式的基本语法和高级用法,包括:
- 基本匹配方法
- 字符集和范围匹配
- 特殊字符匹配
- 重复匹配模式
- 分组和捕获
- 查找、替换和分割操作
- 预编译正则表达式
掌握这些知识后,你将能够高效地处理各种复杂的字符串匹配和文本处理任务。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考