正则表达式re模块的使用教程『更新中』

python 复制代码
import os
import re
from pathlib import Path, PurePath

使用match函数只能检测匹配的第一个字符

python 复制代码
pattern = "s"
strs = "sdsjflakdhfpsa"

res = re.match(pattern, strs)
print(res) # 如果第一个字符匹配成功了则返回类型信息和字符信息
print(res.group()) # 使用group函数,才可以另返回值是匹配的字符
复制代码
<re.Match object; span=(0, 1), match='s'>
s

使用findall实现所有字符的匹配

python 复制代码
res = re.findall(pattern, strs)
print(res)
复制代码
['s', 's', 's']

元字符

python 复制代码
#. 表示非\n的任意字符
print(re.match(".", "123456789"))
# \d 匹配任意的数字0~9
print(re.match("\d", "123456789"))
# \D 匹配非数字0~9(任意大写都表示非)
print(re.match("\D", "a_123456789")) 
# 每一个方括号表示只匹配一个字符
# \s表示空白字符,就是看不到的字符, 如\n\t, "\S"与之相反
print(re.match("\s\s", "\n\t"))
# \w 大小写字母,数字和下划线 "\W"与之相反
print(re.match("\w\w\w\w", "_Aa123456789"))
复制代码
<re.Match object; span=(0, 1), match='1'>
<re.Match object; span=(0, 1), match='1'>
<re.Match object; span=(0, 1), match='a'>
<re.Match object; span=(0, 2), match='\n\t'>
<re.Match object; span=(0, 4), match='_Aa1'>

可以使用范围, 一个中括号表示一个字符位置

python 复制代码
print(re.match("[0-9][0-9]", "123456789"))
print(re.match("[a-e]", "asddfffgg"))
print(re.match("[w-z]", "xsfasdff"))
print(re.match("[0-9a-e]", "123456789"))# 第一个位置不管是0-9内还是a-e内都可以匹配
复制代码
<re.Match object; span=(0, 2), match='12'>
<re.Match object; span=(0, 1), match='a'>
<re.Match object; span=(0, 1), match='x'>
<re.Match object; span=(0, 1), match='1'>

多字符的匹配

python 复制代码
print(re.match("\d\d\d\d\d\d\d\d\d", "123456789"))
# 等价于
print(re.match("\d*", "123456789")) # "*"使用任意次的"\d"
print(re.match("\d*", "12345a6789")) # 一直向后匹配直到遇到非数字
print(re.match("\d+", "12a3456789")) # "+"之前一定要出现至少一次数字才能匹配
print(re.match("\d+", "a12a3456789")) # "a"之前一次都没有出现,所以是None
复制代码
<re.Match object; span=(0, 9), match='123456789'>
<re.Match object; span=(0, 9), match='123456789'>
<re.Match object; span=(0, 5), match='12345'>
<re.Match object; span=(0, 2), match='12'>
None

次数匹配

python 复制代码
print(re.match("\d{3}", "1234a3456789")) # 之前一定要至少出现3次,才可以拿到3个位置的字符
print(re.match("\d{3,}", "1234a3456789")) # 之前一定要至少出现3次,才可以拿到所有的字符
print(re.match("\d{3,6}", "1234345a6789")) # 之前一定要至少出现3到6次之间,才可以拿到其中的所有的字符
复制代码
<re.Match object; span=(0, 3), match='123'>
<re.Match object; span=(0, 4), match='1234'>
<re.Match object; span=(0, 6), match='123434'>

边界处理

python 复制代码
# 匹配一个电话号码
tel = "13345678910aa298097"
print(re.match("^1[358][1-9]\d{8}$", tel)) # "^"表示开头,"$"表是结尾
# "\b"表示边界, \B与之相反 
str = "Welcome to Longman Dictionary of Contemporary English Online"
print(re.findall('an\\b', str)) # 以an结尾的内容
print(re.findall('\\bLon', str)) # 以Lon开头的内容
复制代码
None
['an']
['Lon']

分组匹配

python 复制代码
t = "2023-10-30fagd"
print(re.match("\d{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])", t))# "|" 这个符号为或者,使用是必须在两边加小括号表示作用域, 小括号为分组使用 
print(re.match("\d{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])", t).group())
print(re.match("\d{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])", t).group(0))
print(re.match("\d{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])", t).group(1))
print(re.match("\d{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])", t).group(2))
print(re.match("(\d{4})-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])", t).group(1))# "0"为全部,"1表示第一组","2表示第二组", "2表示第三组"
复制代码
<re.Match object; span=(0, 10), match='2023-10-30'>
2023-10-30
2023-10-30
10
30
2023
相关推荐
冷雨夜中漫步8 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴8 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再8 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
喵手10 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_9449347310 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy10 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
肖永威11 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ12 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha12 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy12 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法