写点什么

Python 正则表达式,看完这篇文章就够了

  • 2020-02-17
  • 本文字数:1896 字

    阅读完需:约 6 分钟

Python正则表达式,看完这篇文章就够了

正则表达式简介

正则表达式,是一个特殊的字符序列,又称规则表达式(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),本质而言是一种小型的,高度专业化的编程语言。


Python 自 1.5 版本起增加了 re 模块,re 模块使 Python 语言拥有全部的正则表达式功能。

正则语法表

关于正则语法表,别想其他的都背过就行了。不管你是 python 还是其他的语言都是一样的,所以背不过就抄到记住为止!这个你背不过,再好的教程看了也没用。如何巧记?我们需要对其进行分类。


  • 开头结尾


这一对标签,大家都不会陌生…



  • 模糊匹配



  • 关于括号



  • “\” 反斜杠的应用



  • 其他


re 模块用法

re.(function)(pattern[, flags])


pattern : 一个字符串形式的正则表达式


flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:


  1. re.I 忽略大小写

  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

  3. re.M 多行模式

  4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)

  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

  6. re.X 为了增加可读性,忽略空格和 # 后面的注释


  • findall() (即:全部找到,返回的是一个列表)


findall(string[, pos[, endpos]])


参数:


  1. string : 待匹配的字符串。

  2. pos : 可选参数,指定字符串的起始位置,默认为 0。

  3. endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。


import res = 'helloworld hellobeijing'ret = re.findall('hello\S+',s)print(ret)['helloworld', 'hellobeijing']
复制代码


  • finditer()


和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)


参数:



  • search() 与 match()


相同点:


  1. 语法:re.search/match(pattern, string, flags=0)

  2. 函数参数说明:



  1. 可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。



import re# re.searchret = re.search('h..','hello hello world')print(ret) # 输出结果:<_sre.SRE_Match object; span=(0, 3), match='hel'>ret1 = re.search('h..','hello hello world').group()print(ret1) # 输出结果:hel 只输出第一个符合条件的结果 # re.matchret = re.match('asd','asdhskdjfksji')print(ret) # 输出结果:<_sre.SRE_Match object; span=(0, 3), match='asd'>返回的是一个对象。ret1 = re.match('asd','asdhskdjfasdksjiasd').group()print(ret1) # 输出结果:asd 调用.group()方法,只返回匹配的第一个结果。
复制代码


不同点:


  1. re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None

  2. re.search 匹配整个字符串,直到找到一个匹配


# re.searchs = 'helloworld hellobeijing'ret = re.search('hellob\S+',s)print(ret)<re.Match object; span=(11, 23), match='hellobeijing'> # re.matchs = 'helloworld hellobeijing'ret = re.match('hellob\S+',s)print(ret)None
复制代码


  • split() 分隔符 对比字符串里边的 split 方法。


split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:


re.split(pattern, string[, maxsplit=0, flags=0])



import res = 'helloworld hellobeijing'ret = re.split('hello',s)print(ret)['', 'world ', 'beijing']
复制代码


sub() 替换;类似字符串中的 replace()方法。


re.sub 用于替换字符串中的匹配项。


语法:


re.sub(pattern, repl, string, count=0, flags=0)


参数:


  1. pattern : 正则中的模式字符串。

  2. repl : 替换的字符串,也可为一个函数。

  3. string : 要被查找替换的原始字符串。

  4. count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。


import res = 'helloworld hellobeijing'ret = re.sub('hello','goodbye',s)print(ret)goodbyeworld goodbyebeijing
复制代码


  • compile(strPattern[,flag]): 这个方法是 Pattern 类的工厂方法,用于将字符串形式的正则表达式编译为 Pattern 对象


compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。


语法格式为:

re.compile(pattern[, flags])


参数:


pattern : 一个字符串形式的正则表达式


  1. flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

  2. re.I 忽略大小写

  3. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

  4. re.M 多行模式

  5. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)

  6. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据

  7. re.X 为了增加可读性,忽略空格和 # 后面的注释


import repattern = re.compile('he.{3}')pattern.match(s)<re.Match object; span=(0, 5), match='hello'>
复制代码


2020-02-17 11:311280

评论

发布
暂无评论
发现更多内容

String Bean 注入方式,2021年Java程序员职业规划

Java 程序员 后端

Spring的XML解析原理,这一次全搞懂再走!,springmybatis整合原理

Java 程序员 后端

代码检查规则:Python语言案例详解

百度开发者中心

Python 方法论 学习笔记

Spring系列:自动注入(autowire,redis笔记

Java 程序员 后端

Struts 学习笔记1 -Struts Framework 概览,BAT面试&高级进阶

Java 程序员 后端

Spring常用注解(绝对经典),非科班面试之旅

Java 程序员 后端

低代码开发平台是什么意思?低代码开发平台优势!

低代码小观

低代码 开发 开发工具 开发平台 企业开发系统

技术+案例详解无监督学习Autoencoder

华为云开发者联盟

神经网络 算法 图片 无监督学习 Autoencoder

Spring(六),终于找到一个看得懂的JVM内存模型了

Java 程序员 后端

Spring(六)(1),mongodb入门书籍

Java 程序员 后端

SQL语句基本语法及函数方法,java编程入门视频教程下载

Java 程序员 后端

SymmetricDS 数据库双向同步开源软件入门,我要自学网java基础百度云

Java 程序员 后端

ThreadLocal内存泄漏分析与解决方案,Java完全自学手册下载

Java 程序员 后端

从挣扎突破到英雄联盟!中国SaaS头部企业阵营渐显

海比研究院

SaaS平台

Spring框架(四)SpringMVC基础,2021最新大厂Java面经

Java 程序员 后端

Spring注解驱动,java面试项目中遇到的问题

Java 程序员 后端

Spring(二十),Java中级开发笔试题及答案

Java 程序员 后端

Spring常用API:Spring类及相关面试点,rabbitmq分布式事务实现原理

Java 程序员 后端

Spring核心——Bean的定义与控制,linuxshell脚本教程

Java 程序员 后端

SQL 中判断条件的先后顺序,会引起索引失效么?,java虚拟机的原理

Java 程序员 后端

Spring学习--面向抽象编程(模拟Spring的简单实现),java架构师教学视频全百度云

Java 程序员 后端

Spring框架底层原理-IoC,java架构师指南pdf下载

Java 程序员 后端

双11攻略来啦:参与Oracle VS openGauss 在线研讨,与盖国强老师、李国良教授面对面!

墨天轮

oracle opengauss 对话

ThreadLocal内存泄漏分析与解决方案(1),linux文件系统原理

Java 程序员 后端

Spring源码学习~循环依赖(面试必问系列,java最新框架技术

Java 程序员 后端

质效中台助力实现质量度模型规模化落地

百度Geek说

架构 中台 测试 QA

SSM整合,kafka教程分享

Java 程序员 后端

Spring源码解析(二)AOP,java基础课程百度云

Java 程序员 后端

She Builds Summit | 感受她的科技力量!

亚马逊云科技 (Amazon Web Services)

开源 职场

Spring(二),java基础面试题应届生

Java 程序员 后端

SQL注入漏洞防护看这一篇就够了!,万字长文

Java 程序员 后端

Python正则表达式,看完这篇文章就够了_云计算_华为云开发者联盟_InfoQ精选文章