正则表达式:Python3中的应用简介

一、正则表达式

1,概述

  正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。

2,表达式列表

   表达式  说明
字符匹配  [0-9]  匹配0-9之间的任意1个数字
 [a-z]  表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[a-z]"匹配"a"与"z"之间的任何1个小写字母。
 [A-Z]  表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[A-Z]"匹配"A"与"Z"之间的任何1个大写字母。
元字符匹配   .  匹配换行符以外的任何字符。
 \w  与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"
 \s  与任何白字符匹配,包括空格、制表符、分页符等。等价于"[\f\n\r\t\v]"。
 \d  与一个数字字符匹配。等价于[0-9]。
 \n  与换行符字符匹配。
 \t  与制表符匹配。
 \b  与单词的边界匹配,即单词与空格之间的位置。例如,"er\b"与"never"中的"er"匹配,但是不匹配"verb"中的"er"
 ^ 匹配输入的开始位置。 
 $  匹配输入的结尾
 \W  与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。
 \D  与非数字的字符匹配。等价于[^0-9]。
 \S  与任何非空白的字符匹配。等价于"[^\f\n\r\t\v]"。
 x|y  匹配x或y。例如"z|food"可匹配"z"或"food"。"(z|f)ood"匹配"zood"或"food"。
 ()  群组,与模式匹配并记住匹配。匹配的子字符串可以从作为结果的Matches集合中使用Item[0]... [n]取得。如果要匹配括号字符(和),可使用"\("或"\)"。
 [xyz]  一个字符集。与括号中字符的其中之一匹配。例如,"[abc]"匹配"plain"中的"a"。
 [^xyz]  一个否定的字符集。匹配不在此括号中的任何字符。例如,"[^abc]"可以匹配"plain"中的"pl".
量词 * 匹配前一个字符零次或几次。例如,"zo*"可以匹配"z"、"zoo"。
+ 匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。
? 匹配前一个字符零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。
{n} n为非负的整数。匹配恰好n次。例如,"o{2}"不能与"Bob中的"o"匹配,但是可以与"foooood"中的前两个o匹配。
{n,} n为非负的整数。匹配至少n次。例如,"o{2,}"不匹配"Bob"中的"o",但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。
{n,m} m和n为非负的整数。匹配至少n次,至多m次。例如,"o{1,3}"匹配"fooooood"中前三个o。"o{0,1}"等价于"o?"。

3,表达式应用区别

(1).^${}的区别

 正则表达式  待匹配字符  匹配结果  说明
 张.? 张杰和张天策和张三小子

张杰

张天

张三

?表示重复零次或一次,即只匹配"李"后面一个任意字符
 张.* 张杰和张天策和张三小子 张杰和张天策和张三小子 *表示重复零次或多次,即匹配"李"后面0或多个任意字符
 张.+ 张杰和张天策和张三小子 张杰和张天策和张三小子 +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符
 张.{1,2} 张杰和张天策和张三小子

张杰和

张天策

张三小

{1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,在一个量词后面加?号使其变成惰性匹配

正则表达式 待匹配字符 匹配结果 说明
 张.*? 张杰和张天策和张三小子

惰性匹配

(2)字符集[ ] [ ^ ]

正则表达式 待匹配字符 匹配字符 说明
 张[杰天策三小子]* 张杰和张天策和张三小子

张杰

张天策

张三小子

表示匹配"李"字后面[杰莲英二棍子]的字符任意次
 张[^和]* 张杰和张天策和张三小子

张杰

张天策

张三小子

表示匹配一个不是"和"的字符任意次
 [\d] 456bdha3

4

5

6

3

  表示匹配任意一个数字,匹配到4个结果
 [\d]+ 456bdha3

456

3

  表示匹配任意个数字,匹配到2个结果

(3)转义符\

  在正则表达式中,有很多有特殊意义的是元字符,比如\d和\s等,如果要在正则中匹配正常的"\d"而不是"数字"就需要对"\"进行转义,变成'\\'。

  在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\d",字符串中要写成'\\d',那么正则里就要写成"\\\\d",这样就太麻烦了。这个时候我们就用到了r'\d'这个概念,此时的正则是r'\\d'就可以了。

正则表达式 待匹配字符 匹配结果 说明
 \d  \d  False   因为在正则表达式中\是有特殊意义的字符,所以要匹配\d本身,用表达式\d无法匹配
 \\d  \d  True   转义\之后变成\\,即可匹配
 "\\\\d"  '\\d'  True   如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次
 r'\\d'  r'\d'  True   在字符串之前加r,让整个字符串不转义

(4)贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配。

正则表达式 待匹配字符 匹配结果 说明
 <.*>  <script>...<script>  <script>...<script>   默认为贪婪匹配模式,会匹配尽量长的字符串
 <.*?>  <script>...<script> <script>
<script>
 
加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串

几个常用的非贪婪匹配模式:

  1. *? 重复任意次,但尽可能少重复
  2. +? 重复1次或更多次,但尽可能少重复
  3. ?? 重复0次或1次,但尽可能少重复
  4. {n,m}? 重复nm次,但尽可能少重复
  5. {n,}? 重复n次以上,但尽可能少重复
  1. .*?的用法:
  1. . 是任意字符
  2. * 是取 0 无限长度
  3. ? 是非贪婪模式。
  4. 何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
  5. .*?x
  6.  
  7. 就是取前面任意长度的字符,直到一个x出现

二、RE模块

1,re函数方法总结

方法名称 格式 说明
 findall  re.findall(表达式,字符串)  返回所有满足匹配条件的结果,放在列表里
 search  re.search(表达式,字符串).groups()  函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,
 该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
 match  re.match(表达式,字符串).groups()  同search,不过尽在字符串开始处进行匹配
 split  re.split(表达式,字符串)   按表达式对字符串分割,返回列表
 sub  re.sub(表达式,替换字符,字符串,count)  按表达式类型替换成新的字符,返回字符串
 subn  re.subn(表达式,替换字符,字符串,count)  按表达式类型替换成新的字符串,返回一个元组,存放这替换结果和替换次数
 compile  re.compile(表达式)  将正则表达式编译成为一个 正则表达式对象
 finditer  re.finditer(表达式,字符串)  finditer返回一个存放匹配结果的迭代器

2,常用方法实例

  1. #(1)findall
  2. import re
  3. ret = re.findall('\d','adsf123456we7we') #匹配字符串中是数字的字符,并将匹配值返回到列表中
  4. print(ret)
  5. '''结果:
  6. ['1', '2', '3', '4', '5', '6', '7']
  7. '''
  8.  
  9. #(2)search
  10. ret = re.search('\d','adsf123456we7we').group() #按照表达式匹配到第一个值就返回
  11. print(ret)
  12. '''结果:
  13. 1
  14. '''
  15.  
  16. #(3)match
  17. ret = re.match('\w','adsf123456we7we').group() #按照表达式匹配开头第一个值,符合的话就返回,不符合就报错
  18. print(ret)
  19. '''结果:
  20. a
  21. '''
  22.  
  23. #(4)sub
  24. ret = re.sub('\d','*','adsf123456we7we',0) #匹配字符串中的数字,并且替换成*号,0表示替换所有
  25. print(ret)
  26. '''结果:
  27. adsf******we*we
  28. '''
  29.  
  30. #(5)subn
  31. ret = re.subn('\d','*','adsf123456we7we',0) #匹配字符串中的数字,并且替换成*号,返回一个元组,存放这替换结果和替换次数
  32. print(ret)
  33. '''结果:
  34. ('adsf******we*we', 7)
  35. '''
  36.  
  37. #(6)compile
  38. obj = re.compile('\d') #将正则表达式编译成一个正则表达式对象
  39. ret = obj.search('ads123asd456').group()
  40. print(ret)
  41. '''结果:
  42. 1
  43. '''
  44.  
  45. #(7)finditer
  46. ret = re.finditer('\d','adsf451we15615adf16') #finditer返回一个存放匹配结果的迭代器
  47. print(ret)
  48. for i in ret:
  49. print(i.group())

正则表达式:Python3中的应用简介的更多相关文章

  1. python3中的RE(正则表达式)

    记录大佬的 整理 原文来自:https://blog.csdn.net/weixin_40136018/article/details/81183504 1.引入正则模块(Regular Expres ...

  2. python基础之六:编码简介以及python3中的编码

    1.常见的四种编码方式的编码过程: ascii A : 00000010 8位 一个字节 unicode A : 00000000 00000001 00000010 00000100 32位 四个字 ...

  3. Python3中Urllib库基本使用

    什么是Urllib? Python内置的HTTP请求库 urllib.request          请求模块 urllib.error              异常处理模块 urllib.par ...

  4. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  5. Python3.x:生成器简介

    Python3.x:生成器简介 概念 任何使用yield的函数都称之为生成器:使用yield,可以让函数生成一个序列,该函数返回的对象类型是"generator",通过该对象连续调 ...

  6. Python3中正则模块re.compile、re.match及re.search函数用法详解

    Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...

  7. Python3中的http.client模块

    http 模块简介 Python3 中的 http 包中含有几个用来开发 HTTP 协议的模块. http.client 是一个底层的 HTTP 协议客户端,被更高层的 urllib.request ...

  8. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  9. Python3中使用PyMySQL连接Mysql

    Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...

随机推荐

  1. Torch-RNN运行过程中的坑 [0](一些基础概念)

    0.Lua & LuaJIT简介 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua 是巴 ...

  2. 关于OBJC

    http://www.objc.io/ objc这个站点是:关于objective-c语言的最佳实践和高阶技术的期刊. 看了几期非常不错,所以计划每天抽出时间翻译一篇文章和大家一起分享.

  3. js事件循环机制(Event Loop)

    javascript从诞生之日起就是一门  单线程的  非阻塞的  脚本语言,单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务,非阻塞靠的就是 event lo ...

  4. 怎么用ChemDraw 15.1 Pro绘制彩色结构

    ChemOffice 15是最新的ChemDraw化学工具套件,合理的使用这套软件可以大幅度的提高研究人员的工作效率.也有一些化学老师使用这套化学绘图软件教学,其可以绘制彩色结构有效增强教案说服力并吸 ...

  5. ChemDraw 15.1 Pro插入阿尔法可以这样做

    在理工科学科学习过程中,大家都会遇到各种希腊字母,而阿尔法(α)又是最常见的一个.最新版本ChemDraw 15.1 Pro的功能更加卓越,在很多功能上都进行了优化,操作更简便.其中,就可以很好的在公 ...

  6. jQuery 事件的命名空间的含义

    对于jquery的on的events解释是 一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click", "keydown.myPlugin&qu ...

  7. python 之 多进程

    阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessingpython中的多线程 ...

  8. Delphi 中窗口文件与无窗口Pas文件的区别 (MTM)

    implementation {$R *.dfm}  ---- 带窗口的 dfm -- 一般的 windows 窗口 {$R *.fmx}  ---- 带窗口的 fmx -- 一般的 FireMonk ...

  9. python 解析 XML文件

    如下使用xml.etree.ElementTree模块来解析XML文件.ElementTree模块中提供了两个类用来完成这个目的: ElementTree表示整个XML文件(一个树形结构) Eleme ...

  10. <pre>标签让<textarea>标签的内容原样输出

    当通过<textarea>插数据进数据的库,取出来后都变成一行变成,用这个<pre>标签能原样输入插入时的格式. 当时要对<pre>加一些CSS样式才行啦. 以下为 ...