正则表达式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
相关推荐
笨鸟先飞,勤能补拙3 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能4 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂4 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study4 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境5 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境5 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1235 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102166 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb006 小时前
一个项目带你入门AI应用开发01
python
0566467 小时前
Python康复训练——常用标准库
开发语言·python·学习