1.正则表达式

  正则表达式为高级的文本模式匹配,抽取,与/或文本形式的搜索和替换功能提供了基础,简单的来说,正则表达式是由一些字符和特殊符号组成的字符串。Python通过标准库中的re模块来支持正则表达式。

2.特殊符号和字符

  首先介绍一下最常见的特殊符号和字符,即所谓的元字符。

表示法 描述 正则表达式用法示例
literal 匹配文本字符串的字面值literal re.findall("chen","sadchen21")
. 匹配任意字符(除了\n之外) re.findall("c..n","sadchen21")
^ 从字符串开始部分开始匹配 re.findall("^sad","sadchen21")
$ 匹配字符串的终止部分 re.findall("21$","sadddchen21")
* 匹配0次或多次前面出现的正则表达式 re.findall("sad*","saddddchen21")
+ 匹配1次或多次前面出现的正则表达式 re.findall("sad+","sadddchen21")
匹配0次或者1次前面出现的正则表达式 re.findall("sad?","sadddchen21")
{N} 匹配N次前面出现的正则表达式 re.findall("sad{3}","sadddchen21")
{M,N} 匹配M~N次前面出现的正则表达式 re.findall("sad{1,3}","sadddcen21")
[] 匹配来自字符集的任一单一字符 re.findall("[a-z]","sadddcen21")
[^..] 不匹配此字符集中出现的任一字符,包括某一范围的字符 re.findall("[^a-z]","sadddcen21")
(...) 匹配封闭的正则表达式,然后另存为子组 re.findall("[(a-z)]","sadddcen21")
\d 匹配任何的十进制数,与[0-9]一致(/D与/d相反,不匹配任何非数值型的数字) re.findall("\d","sa2dcen21")
\w 匹配任何字母数字字符,与[A-Z],[a-z],[0-9]相同,(\W与之相反) re.findall("\w","sa2dcen21")
\s 匹配任何空格字符,与\n\r\t等相同,(与\S相反) re.findall("\s","sa2dce\nn 21")
\b 匹配任何单词边界,匹配特殊字符(\B与之相反) re.findall(r"I\b","I am Czp")

  在上面/b的例子中,为什么要加r?

  r的作用就是让后面的字符串不做任何的转义,如果不加r能不能起到相同的作用呢?

re.findall("I\\b","I am Czp")   通过转义符\来实现

3.重要符号详细用法讲解

  • 表示择一的管道符号“|”,表示一个“从多个模式中选择其一”的操作,它用于分割不同的正则表达式,择一匹配有时候也被称为(union)或逻辑或
re.findall("ka|b","sdkakb11")     匹配ka或b
re.findall("ka|b","sdka11")    
  • 匹配任意字符“.”,点好或句点(.)符号匹配除了换行符\n以外的任意字符
re.findall("s..a","sdka11")  匹配在s和a之间任意的两个字符
re.findall("..","sdka11")    匹配任意两个字符
re.findall(".a","sdka112")   匹配a前的任意一个字符

  要显式匹配一个句点符号本身,必须使用反斜杠转义句点符号的功能,例如“\.”

  • 从字符串起始或者结尾或者单词边界匹配“^”“$”“\b”
re.findall("^sa","sdka112")  匹配以s开头的字符或字符串
re.findall("12$","sdka112")  匹配以12结尾的字符或字符串

  匹配边界字符“\b”

  \b用于匹配一个单词的边界,这意味着如果一个模式必须位于单词的起始部分,就不管该单词前面(单词位于字符串中间)是否有任何字符(单词位于首行),而\B将匹配出现在一个单词中间的模式,即不是单词边界

re.findall("er","never")        匹配任意包含the的字符串
re.findall(r"er\b","never")     匹配任意以er为起始位置的字符串
re.findall(r"er\B","evern")     匹配包含er但不以er为起始的字符串

  创建字符集“[]”

  “.”可以用于匹配任意符号,但某些时候需要匹配某些特定字符,这就需要[],用来匹配一对方括号中包含的任何字符。如b[ner]t匹配的字符串就是bnt,bet,brt,方括号表示逻辑或的功能,对于单个字符,如果想要:要么匹配a,要么匹配b,就可以用[ab]表示,字符集只适用于单字符的情况,如果要匹配多个字符,就需要使用择一方法“|”

  最常用的特殊符号“”“+”“?”

  "
"、"?"、"+"都可以用来匹配一个、多个或者没有出现的字符串模式,"*”用来匹配其左边的正则表达式出现零次或多次,“+”号将匹配一次或多次出现的情况,“?”将匹配零次或一次出现的正则表达式,而{N}或{M,N}这将最终精确的匹配前面的正则表达式N次或一定范围的次数。

  当模式匹配使用分组操作符的时候,正则表达式的引擎将试图匹配出尽可能多的字符,这叫做贪婪匹配

re.findall("sad*","saddddsds")  匹配d,d可以出现0次,或多次
re.findall("sad+","saddddsds")  匹配d,d不可以出现0次,匹配1次或多次
re.findall("sad?","saddddsds")  匹配d,d可以出现0次,匹配0次或1次
re.findall("\d{2}","sad123dsds") 匹配两个连续的数字字符

  如果想要提取任意已经成功匹配的特定字符串或子字符串,就需要用“()”来包裹正则表达式

  当使用正则表达式的时候,一对圆括号可以实现以下任意一个功能

  • 对正则表达式进行分组
  • 匹配子组

  示例:当有两个不同的正则表达式而且想用它们来比较同一个字符串的时候,就需要用到“()”,还有对正则表达式进行分组可以重复使用操作符,使匹配到的子字符串保存起来以供后续使用。

  扩展表示法,以问号开始(?..),很重要的一个(?P

4.re模块的核心函数和方法

  常见的正则表达式属性

compile():使用可选的标记来编译正则表达式的模式,返回一个对象

matach():匹配字符串,如果成功,就返回匹配对象,如果失败,就返回None

search():匹配第一次出现的正则表达式,成功,返回匹配对象,失败,就返回None

findall():查找字符串中所有出现的正则表达式模式,并返回一个匹配列表

finditer(): 与findall相同,但返回的不是一个列表,而是一个迭代器

spilt():将字符串分割为列表,返回成功匹配的列表

sub():替换所有正则表达式的模式在字符串中出现的位置

purge():清楚隐式编译的正则表达式模式

group():返回整个匹配对象,或者编号为num的特定子组

  函数篇就写到这里,接下来会写面向对象部分的内容,如果有遗漏的,欢迎大家和我交流,我会第一时间补上遗漏的知识点。

Python函数篇(7)-正则表达式的更多相关文章

  1. Python函数篇(5)-装饰器及实例讲解

    1.装饰器的概念   装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式   装饰器可以简单的理 ...

  2. python函数篇:名称空间、作用域和函数的嵌套

    一.名称空间:(有3类) (1)内置名称空间(全局作用域) (2)全局名称空间(全局作用域) (3)局部名称空间(局部作用域) 关于名称空间的查询: x=1 def func(): print('fr ...

  3. Python函数篇:dict函数和列表生成式

    1.dict函数语法:dict()dict(**kwarg) dict(mapping, **kwarg) dict(iterable, **kwarg) 第一种:dict()构造一个空字典 h=di ...

  4. Python函数篇:装饰器

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...

  5. Python函数篇

    1.函数名的命名规则: 函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合.不能使用任何的标点符号: 函数名是区分大小写的. 函数名不能是保留字. 2. 形参和实参 形参:形式参数,不 ...

  6. Python函数篇(二)之递归函数、匿名函数及高阶函数

    1.全局变量和局部变量 一般定义在程序的最开始的变量称为函数变量,在子程序中定义的变量称为局部变量,可以简单的理解为,无缩进的为全局变量,有缩进的是局部变量,全局变量的作用域是整个程序,而局部变量的作 ...

  7. Python函数篇(2)-递归函数、匿名函数及高阶函数

    1.全局变量和局部变量 一般定义在程序的最开始的变量称为函数变量,在子程序中定义的变量称为局部变量,可以简单的理解为,无缩进的为全局变量,有缩进的是局部变量,全局变量的作用域是整个程序,而局部变量的作 ...

  8. Python函数篇(3)-内置函数、文件处理

    1.内置函数 上一篇文章中,我重点写了reduce.map.filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对 ...

  9. Python函数篇(4)之迭代器与生成器

    1.文件操作的"b模式"(补充) 在上一篇文章中,我在最后一部分写了文件处理的一些方法,但是觉得还是有必要再提一下如下的内容: 像rb.wb.ab这种模式,是以字节的形式操作,需要 ...

随机推荐

  1. mysql故障解决笔记

    错误提示如图 一开始我查询了 [root@web01 mysql]# ls -al /lib/libc* -rwxr-xr-x 1 root root 1909464 Mar 22 01:49 /li ...

  2. JS 判断某个字符串是否存在与数组中

    <script> function in_array(stringToSearch, arrayToSearch) { for (s = 0; s < arrayToSearch.l ...

  3. C++几个技巧:智能指针在消息传递中的使用,元组,及lambda删除器

    1.SendMessage/PostMessage中传递对象参数 (1)方法1:使用shared_ptr 发送端: PostMessage(MyhWnd, CWM_SOME_ERROR, 0, rei ...

  4. 编写高质量代码—javascript的分层—base层

    base层的功能是为common层和page层提供接口.封装不同浏览器下javaScript的差异,提供统一的接口 1.用getNextNode 函数封装IE和Firefox的差异: 2.透明度:封装 ...

  5. 【技能大赛笔记01】Zigbee点对点按键控制程序开发

    [技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...

  6. AspNet Core Api Restful +Swagger 实现微服务之旅 (三)

    (1)  访问Rest ful接口时 Token验证  返回数据格式封装 (一)访问时Token验证  返回数据格式封装 1.1访问Api接口 方法 实现         1.1.1 创建访问Rest ...

  7. FSharp 调用 Oracle.ManagedDataAccess.dll

    FSharp 调用 Oracle.ManagedDataAccess.dll 1.Oracle.ManagedDataAccess.dll 的下载地址.好像如今必需要注冊才干下载. 即使是 64 位系 ...

  8. lua 中pairs 和 ipairs差别

    ipairs 和pairs在lua中都是遍历tbale的函数可是两者有差别 1.pairs遍历table中的全部的key-vale 而ipairs会依据key的数值从1開始加1递增遍历相应的table ...

  9. 我的csdn博客搬家了

    把csdn上的文章都给搬到我的新博客去了, 将会在新的博客上继续写相关的技术文章 欢迎訪问: http://www.kai-zhou.com

  10. HDU 5288 OO‘s sequence (技巧)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5288 题面: OO's Sequence Time Limit: 4000/2000 MS (Jav ...