正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、
及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字
符串的⼀种过滤逻辑。

  • 需要引⼊内置模块
  • re 缺点:效率低下,能⽤字符串⽅法完成尽量使⽤字符串的⽅法
  • 优点:编码简单

1.为什么使⽤正则表达式

  • 使⽤场景
    敏感词过滤
    ⼿机、邮箱等验证
    爬⾍
    2.正则表达式的组成
  • 原⼦ 组成正则表达式的最⼩单位,任何字符都可以
原⼦ 含义
\d 0-9中任何⼀个字符 [0-9]
\D ⾮0-9中的任何⼀个字符 [^0-9]
\s \n\r\t 空格
\S ⾮\n\r\t 空格中任何⼀个字符 [^\n\t\r ]
[] ⾃⼰创建的原⼦表,[0-4]代表0-4中任何⼀个字符
[^] 排除原⼦表中的字符
^ ⾏⾸;在原⼦表中表示排除
$ ⾏结尾
[\u4e00-\u9fa5] 匹配纯中⽂
\w 0-9a-zA-Z的中任何⼀个字符 [0-9a-zA-Z]
\W ⾮0-9a-zA-Z_的中任何⼀个字符[^0-9a-z_AZ]
. 代表除\n之外的任何字符
\b 词边界
\B ⾮词边界
\A 字符串开始
\Z 字符串的结尾
- 表示域,0-9就表示0 到9所有数字字符
  • 元字符 元字符能够增强原⼦的描述能⼒
元字符 含义
{} 表示重复前一个原子的次数
{m} 表示重复前一个原子的m次
{m,n} 表示重复前一个原子最少m次,最多n次
{m,} 表示重复前⼀个原⼦的最少m次
() 改变优先级,取⼦元素
* 重复0次或多次{0,}
+ ⾄少出现1次{1,}
? 出现0次或1次{0,1}
*?或+? 取消贪婪
x|y 表示匹配x或者y
  • 模式修正符
修饰符 含义
re.S 使.匹配所有字符
re.L 本地化识别
re.U 根据Unicode字符集解析字符,会影响\b、\B、\w、\W
re.I 不区分⼤⼩写
re.M 多行匹配

注意:

  • 模式字符串⼀定要使⽤原⽣字符串,也就是⽤r开头的字符串。r’www’
  • 严格区分⼤⼩写
  • 如果正则表达式中有{,},[,],-,?,*,|^,$,.等做普通字符,则要将其转义
    3.正则常⽤⽅法
  • re.match()
原型:re.match(pattern,string,flags=0)
功能:从字符串起始位置匹配⼀个模式,如果不是从起始位置匹配则返回None
参数:patter 模式string 要匹配的字符串flag 模式修正符
返回值: 匹配成功返回⼀个Match object,失败返回None
print(re.match(r'www','www.baidu.com'))
print(re.match(r'www','http:///www.baidu.com')) #None
print(re.match(r'www','cctv.www.baidu.com')) #None
ret = re.search(r'(abc)+', 'xxxabcabcabcdef')
print(ret.group(0)) # abcabcabc 匹配整个表达式
print(ret.group(1)) # abc 第⼀次匹配到的结果
print(ret.span()) # (3, 12) 开始和结束位置
print(ret.groups()) # 表示当正则表达式⾥有多个分组时,多个分组的匹配
结果
  • re.search()
原型:re.search(pattern, string, flags=0)
功能:顺序扫描字符串,找到第⼀个匹配项结束
参数:patter 模式string 要匹配的字符串flag 模式修正符
返回值:匹配成功,返回match object,否则返回None
print(re.search(r'll','hello'))
print(re.search(r'll','heLLo',re.I))
  • re.findall()
原型:findall(pattern, string, flags=0)
功能:扫描整个字符串,并返回结果列表
参数:patter: 匹配的正则表达式string: 要匹配的字符串flags:模式修正符
返回值:如果匹配成功返回⼀个列表,包含了所有匹配项,失败返回空列表
print(re.findall(r'oo','kksdkoosdflsdfooksdfsdoOppppweOo',re.I))
#['oo', 'oo', 'oO', 'Oo']
  • re.split
原型:split(pattern, string,maxsplit=0,, flags=0)
功能:⽤模式做分隔符,将字符串分隔,返回分隔列表,如果模式加上括号,则分
隔符会被保留
参数:patter: 匹配的正则表达式string: 要匹配的字符串maxsplit 匹配次数,0不限制次数flags:模式修正符print(re.split(r'\d|,|;','w1w2w3w,w;w'))#['w', 'w', 'w', 'w',
'w', 'w']
  • re.sub和re.subn
sub(pattern, repl, string, count=0)
subn(pattern, repl, string, count=0)
功能:在⽬标字符串中以正则表达式的规则匹配字符串,再把他们替换成指定的字
符串。可以指定替换的次数,如果 不指定,替换所有的匹配字符串
参数:pattern: 正则表达式(规则)repl: 指定的⽤来替换的字符串string: ⽬标字符串count: 最多替换次数
区别:前者返回⼀个替换后的字符串,后者返回⼀个元组,第⼀个元素替换后的字
符串,第⼆个元素表示被替换的次数
print(re.sub(r"(good)", "nice", "cheng is good man"))
print(re.subn(r"(good)", "nice", "cheng is good man"))
  • re.group()和re.groups()
    ⽤于提取⼦元素,模式中⼀个括号就是⼀个⼦元素,group和groups只能在
    match和search⽅法⾥使⽤,通过返回的match object获取⼦元素。在模式串
    和sub和subn中的替换字符串中可以使⽤\1,\2,\3…来引⽤⼦元素
m = re.match(r"(\d{3})-(\d{8})", "010-53247654")
#使⽤序号获取对应组的信息,group(0)⼀直代表的原始字符串
print(m.group(0))
print(m.group(1))
print(m.group(2))
#查看匹配的各组的情况
print(m.groups())
  • compile
    当我们使⽤正则表达式时,re模块会⼲两件事 1、编译正则表达式,如果正则
    表达式本身不合法,会报错 2、⽤编译后的正则表达式去匹配对象
    编译正则表达式使⽤compile
原型:re.compile(pattern, flags=0)
功能:将正则表达式模式编译成正则表达式对象,其 match() 和 search() ⽅
法可⽤于匹配
参数:pattern 模式flags 模式修正符
re_telephon = re.compile(r"^1(([3578]\d)|(47))\d{8}$") #编译,返回
print(re_telephon.match("13600000000")) #

30天Python基础(正则表达式)相关推荐

  1. python基础—正则表达式即re模块

    正则表达式(regular expression),就是字符匹配模式,而这个匹配规则在我们写爬虫进行数据提取,或者进行数据可视化进行数据清洗时经常用到,多样化的匹配规则在复杂的字符的情况提取数据时助我 ...

  2. python入门编程题库-Python随笔30:Python基础编程练习题25~26

    注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. Python编程 Python基础练习题25:合并两个列 ...

  3. 【学习笔记】30、Python基础综合练习

    Python基础综合练习 [综合习题] 设计一个MySQL数据库操作的类,可以实现数据库的各种操作(增删改查). 创建类源代码: # 创建MySQL数据库操作的类 class Mysql_opeati ...

  4. Python基础——正则表达式

    文章目录 1.前言 2.单匹配 3.多匹配 4.按类型匹配 5.重复匹配 6.分组 7.findall(找全部匹配项) 8.replace(替换) 9.split(切分) 10.compile 1.前 ...

  5. python基础—正则表达式

    目录 1.正则表达式:☆ 1.1 正则写法快速入门: ① 常用正则符号:☆ 1.1.1 利用原生字符r"\()"  规则: ② 使用re模块实现正则表达式: [1]使用match( ...

  6. Python基础--正则表达式语法及其操作

    # 正则表达式语法 # 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条 ...

  7. python基础(正则表达式)

    http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 转载于:https://www.cnblogs.com/wanderingzj/ ...

  8. 【Python基础】Python正则表达式入门到入魔

    关于正则表达式,很多人认为,使用的时候查询下就可以,没必要深入学习,但是知识与应用永远都是螺旋辩证的关系,有需要查询也无可厚非,但是先掌握知识,可以让应用更创新,更深入,超越他人,必须要先掌握大量的深 ...

  9. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  10. Python基础(十一)--正则表达式

    Python基础(十一)--正则表达式 1 简述 正则表达式可以对指定的字符串与模式之间执行模式匹配.模式可以是普通的字符串,也可以是含有特殊意义字符的字符串.通过正则表达式,我们可以进行查找,校验等 ...

最新文章

  1. python实现单例_Python 实现单例模式
  2. 使用WC“.NET研究”F实现SOA面向服务编程——简单的WCF开发实例
  3. 会话技术(session/cookie)
  4. 学习方法之04提取练习,永远都不会忘的记忆方法
  5. Codeforces Round #243 (Div. 2) A~C
  6. ConfigParser.InterpolationSyntaxError: ‘%‘ must be followed by ‘%‘ or ‘(‘, found: “%‘“
  7. iphone照片永久删除怎么恢复_微信数据怎么永久删除不被恢复?只删除聊天记录没用,打开这里彻底删除!...
  8. oracle ora 16014,ORA-16014 ORA-00312错误解决
  9. 心音与心电信号分析之一--6.26--心音信号数字滤波
  10. oracle禁止访问监听,关于ORACLE数据库监听自动停止解决一例
  11. 图像识别利用计算机对图像进行,图像识别方法
  12. mp4文件如何转换为webm格式 1
  13. 淘宝返利公众号开发、淘宝联盟API权限申请及对接详细教程
  14. android什么叫服务器,Android系统中神秘的Bootloader究竟是什么
  15. linux 进程无法启动,linux6.*无法正常启动has进程解决方案
  16. 关于麻将和牌算法的那些事
  17. 锂离子电池和燃料电池特性介绍
  18. 这些有趣的AI人脸特效背后,腾讯云都做了什么?
  19. Json和List互相转化
  20. ​用机器学习和神经科学解码大脑信号

热门文章

  1. jquery option selected 无效
  2. 后台运行shell命令eog,并用pkill关闭
  3. python读取pcd文件_(一)读取PCD文件
  4. Word | 图片被文字遮挡
  5. 中文文案排版 - 中文排版教程
  6. 公有云NAT 网关比较
  7. 林轩田《机器学习基石》(十一)—— Linear models for classification
  8. mysql+tinyint+符号_mysql中TINYINT的取值范围
  9. python中的wx模块
  10. PCB多层板为什么都是偶数层