栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python02-正则表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python02-正则表达式

一、写正则表达式的套路 1、确定模式包含了多少子模式

例如:0571-23123345-9527,这三个子模式用固定字符连接

2、各个部分的字符分类是什么

这3个子模式都是数字类型,可以用d,现在就可以写出模式d-d-d

3、各个子模式如何重复

第1个子模式重复3-4次,第2个子模式重复7-8次,第3个子模式重复3-4次
加上次数限制之后,规则可以表示为d{3,4}-d{7,8}-d{3-4}

4、是否有外部位置限制

是否要求在某特定字符附近

5、是否有内部的限制

是否要求是以某特定字符在某位置(例如要求以‘1’开头,或者以‘9527’结尾)

二、正则表达式的语法分类

字符规则

正则匹配
a,b,c,1,2,3,-字符常量,一般直接代入正则表达式
d一个数字
D一个非数字字符
s一个空格
S一个非空格
w一个任意字母,数字,下划线字符
W一个除了字母,数字,下换线以外的任意字符
[abcf]a,b,c,f中的任意一个字符
a-e范围:从a到e中的任意一个字符
^a-d^:取反。除了a,b,c,d以外的任意一个字符
b退格符号
.通配符,除了换行n之外的任何一个字符

重复次数-量词

正则匹配
*0或多个
+1个或者多个
0个或者1个
{2}2个
{2,5}2到5个
{2,}至少2个
{,5}最多5个

位置

正则匹配
^字符串的开头
A字符串开头,忽略m标记(m标记代表跨行)
$字符串行尾
Z字符串行尾,忽略m标记
b单词边界
B非单词边界
(?=…)匹配在某指定字符串之后的位置
(?!..)匹配在…不出现之后的位置
(?<=…)匹配在…出现之前的位置
(?匹配…不出现在之前的位置

分组:把一个正则表达式分成几个部分,这样就可以重复某个分组

正则匹配
(…)捕获一个组
(?P…)捕获某组名为Y
(?:…)不捕获某组
Y匹配第Y个匹配到的组
(?P=Y)匹配名为Y的组
(?#…)注释

特殊字符

正则匹配
n换行符
r回车符
ttab符号
YYY八进制符号YYY
xYY16进制符号

正则表达式语法规则中比较常用的还是字符规则和重复次数以及位置,所以重点记这三个表。

三、Python的re模块学习

python中的re模块具有如下几个函数:
1、查找

  • search: 查找负荷模式的字符,只返回第一个,返回Match对象。
  • match: 与search相同,只是从头开始匹配。
  • findall: 返回所有符合的字符串列表
  • finditer: 返回一个迭代器,其中包含所有的匹配,也就是Match对象

2、替换

  • sub: 替换匹配的字符串,返回替换完成的文本。
  • subn: 替换匹配的字符串,返回替换完成的文本和替换的次数。

3、分割

  • split: 用匹配表达式的字符串做分隔符分割原字符串。

4、编译

  • compile: 把正则表达式编译成一个对象,方便以后使用。
四、正则表达式的常见套路 1、匹配固定的字符串
#一般固定的字符串不使用正则表达式也可以做到,只需要借用字符串的in方法就可以
#例如:text='tel:178506597623,体重:144,学号:123456,密码:9527'
import re

text='tel:178506597123,体重:144,学号:123456,密码:9527'

#使用字符串方法:
target = '123456'
if target in text:
    print('yes')
else:
    print('no')

import re
print(re.findall(r'123',text))
#['123', '123']
#此处使用findall是为了避免文本中出现多个123,可以看到运行结果会把文本中所有的
#目标字符串都匹配出来。
2、匹配出同类型字符
#l2:一类字符
#找出所有的数字
text = text='tel:178506597123,体重:144,学号:123456,密码:9527'
print(re.findall(r'd+',text))
#d代表数字。后面的+代表出现一个或多个
#找出所有的字符
3、重复的某一类字符
#l3 : 重复某一类字符
text='tel:178506597123,体重:144,学号:123456,密码:9527'
print(re.findall(r'd+',text))
4、比对字符串+数字的组合
#l4 组合l2
#找出座机号码
text='tel:1785-06597123,体重:144,学号:123456,密码:9527'
print(re.findall(r'd{4}-d{8}',text))
5、外部约束,限制位置
#l6 限定位置
#在句子开头的手机号码,或者座机号码
text = '12345678910,tel2:1785-06597,体重:144,学号:123456,密码:9527'
print(re.findall(r'^d{4}-d{8}|^d{11}',text))
6、内部约束,限制字符串的格式
#l7 内部约束
#找出形如abc,abc的前后三个字母重复的字符串
text='barbar carcar harhel'
print(re.findall(r'(w{3})(1)',text))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号