Python02-正则表达式

Python02-正则表达式,第1张

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八进制符号YYYxYY16进制符号

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

三、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))

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5443550.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存