Python---正则表达式

正则表达式 :使用re模块,基于re模块中的三个基础方法来做正则匹配,分别是:match, search, findall​​​​​​​

当字符串以r前缀开始时,Python将不会对字符串中的转义字符进行转义处理

re.match(匹配规则,被匹配字符串)

从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空

python 复制代码
import re
# 从头开始匹配
s = "abc bac bca cab cba"
result = re.match("abc", s)
print(result)  # <re.Match object; span=(0, 3), match='abc'>
print(result.span())  # (0, 3)
print(result.group())  # abc

result1 = re.match("bac", s)
print(result1)  # None
# print(result1.span())  # 会报错
# print(result1.group())  # 会报错

search(匹配规则,被匹配字符串)

搜索整个字符串,找出匹配的.从前向后,找到第一个就停止,不会继续向后查找

python 复制代码
import re

s = "sd999abc999sdabc"
result = re.search("abc", s)
print(result)  # <re.Match object; span=(5, 8), match='abc'>
print(result.span())  # (5, 8)
print(result.group())  # abc

result1 = re.search("qw", s)
print(result1)  # None
# print(result1.span())  # 会报错
# print(result1.group())  # 会报错

findall(匹配规则,被匹配字符串)

匹配整个字符串,找出全部匹配项

python 复制代码
import re

s = "sd999abc999sdabc"
result = re.findall("abc", s)
print(result)  # ['abc', 'abc']

单字符匹配

. :匹配任意一个字符串(除了\n), \.匹配点本身

\[\] : 匹配\[\]中列举的字符

\d : 匹配数字, 即0 - 9

\D : 匹配非数字

\s : 匹配空白, 即空格和tab键

\S : 匹配非空白

\w : 匹配单词字符, 即a - z, A - Z, 0 - 9, _

\W : 匹配非单词字符

python 复制代码
import re

s = "hello @@hiHI !!999 ##hahaHA 456"

# 找出全部数字
result = re.findall(r"\d", s)  # 当字符串以r前缀开始时,Python将不会对字符串中的转义字符进行转义处理
print(result)  # ['9', '9', '9', '4', '5', '6']

# 找出全部非单词字符
result1 = re.findall(r"\W", s)
print(result1)  # [' ', '@', '@', ' ', '!', '!', ' ', '#', '#', ' ']

# 找出全部单词字符
result2 = re.findall(r"\w", s)
print(
    result2)  # ['h', 'e', 'l', 'l', 'o', 'h', 'i', 'H', 'I', '9', '9', '9', 'h', 'a', 'h', 'a', 'H', 'A', '4', '5', '6']

# 找出全部a-z和A-Z的的字母
result3 = re.findall(r"[a-zA-Z]", s)
print(result3)  # ['h', 'e', 'l', 'l', 'o', 'h', 'i', 'H', 'I', 'h', 'a', 'h', 'a', 'H', 'A']

result4 = re.findall(r"[a-z]", s)
print(result4)  # ['h', 'e', 'l', 'l', 'o', 'h', 'i', 'h', 'a', 'h', 'a']

数量匹配

* : 匹配前一个规则的字符出现0至无数次

  • : 匹配前一个规则的字符出现1至无数次

? : 匹配前一个规则的字符出现0至1次

{m} : 匹配前一个规则的字符出现m次

{m,} : 匹配前一个规则的字符最少出现m次

{m,n} : 匹配前一个规则的字符出现m到n次

边界匹配

^ : 匹配字符串开头

$ : 匹配字符串结尾

\b : 匹配一个单词的边界

\B : 匹配非单词边界

分组匹配

| : 匹配左右任意一个表达

() : 将括号中的字符作为一个分组

python 复制代码
# 匹配账号:只能有字母和数字组成,长度限制6-10位
r = "^[0-9a-zA-Z]{6,10}$"
s = '1234567'
s1 = '1234567a'
s2 = '1234567a_'
print(re.findall(r, s))  # ['1234567']
print(re.findall(r, s1))  # ['1234567a']
print(re.findall(r, s2))  # []

# 匹配QQ号:纯数字,长度5-11,第一位不为0
r1 = "^[1-9][0-9]{4,10}$"
q = "0123456"
q1 = "123456"
print(re.findall(r1, q))  # []
print(re.findall(r1, q1))  # ['123456']

# 匹配邮箱地址:只允许q,163,gmail这三种邮箱地址
# {内容}.{内容}.@{内容}
r2 = "(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)"
e = "abc.asd.qwe@163.com.a.c"
e1 = "233@123.cdw"
print(re.findall(r2, e))  # [('abc.asd.qwe@163.com.a.c', '.qwe', '163', '.c')]
print(re.match(r2, e))  # <re.Match object; span=(0, 23), match='abc.asd.qwe@163.com.a.c'>
print(re.match(r2, e1))  # None
相关推荐
BK贝壳19 分钟前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
2601_966949652 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
在世修行6 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885727 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI7 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
信誓旦旦的程序猿7 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫8 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
KeepRobots9 小时前
11-01 温哥华不回拨:用 60 行 Python 查你的工单系统会不会差一小时(KeepRobots 工程笔记)
python
xiao77mwq9 小时前
你以为 OCR 慢?实测 81.3 s 里全是故障代价:如何把「定格态」消掉,让耗时从 6.5 s 到 13 倍差距显出原形
python
深圳市益普科技有限公司10 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法