Python正则表达式完全指南 - MorvanZhou教程解析

Python正则表达式完全指南 - MorvanZhou教程解析

tutorials 一个关于机器学习算法的教程项目,适合对机器学习算法有入门兴趣的人士学习和实践,内容包括基础知识、算法原理、实践案例等多个方面。特点是通俗易懂,步骤清晰,易于入门学习。 tutorials 项目地址: https://gitcode.com/gh_mirrors/tut/tutorials

正则表达式(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正则表达式的基本语法和高级用法,包括:

  1. 基本匹配方法
  2. 字符集和范围匹配
  3. 特殊字符匹配
  4. 重复匹配模式
  5. 分组和捕获
  6. 查找、替换和分割操作
  7. 预编译正则表达式

掌握这些知识后,你将能够高效地处理各种复杂的字符串匹配和文本处理任务。

tutorials 一个关于机器学习算法的教程项目,适合对机器学习算法有入门兴趣的人士学习和实践,内容包括基础知识、算法原理、实践案例等多个方面。特点是通俗易懂,步骤清晰,易于入门学习。 tutorials 项目地址: https://gitcode.com/gh_mirrors/tut/tutorials

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱勃骅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值