正则表达式

一、普通字符

.     通配符一个.只匹配一个字符

匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符

>>> import re

>>> re.findall("abcd","abcdrbnmjfsdsaeedsss")

['abcd']

>>> re.findall("a..d","abcdrbnmjfsdsaeedsss")

['abcd', 'aeed']

^    以什么开头

>>> re.findall("^a..d","abcdrbnmjfsdsaeedsss")

['abcd']

$  以什么结尾

>>> re.findall("a..d$","abcdajhd")

['ajhd']

*  代表匹配*前面的字符 重复0到无穷次

>>> re.findall("^g*","ggggggggsdfsdf")

['gggggggg']

>>> re.findall("^g*","gggdfsdf")

['ggg']
>>> re.findall("gou*","gossee")

['go']

>>> re.findall("gou*","gosseegouuusssdd")

['go', 'gouuu']

+  代表匹配+前面的字符 重复1到无穷次

>>> re.findall("gou+","gossee")

[]

>>> re.findall("gou+","gosseegouuusssdd")

['gouuu']

*和+属于贪婪匹配

? 代表匹配?前面的字符的0次或者是1次

>>> re.findall("gou?","gossee")

['go']

>>> re.findall("gou?","gosseegouuusssdd")

['go', 'gou']

{}可以指定重复几次

{0,} 代表重复{}前面字符的0到无穷次,相当于*

{1,} 代表重复{}前面字符的1到无穷次,相当于+

{0,1}代表重复{}前面字符的0到1次,相当于?

{6}代表重复{}前面字符的6次

{1,3}代表重复{}前面字符的1次到3次

>>> re.findall("gou{3}","gosseegouuusssdd")

['gouuu']

>>> re.findall("gou{0,3}","gosseegouuusssdd")

['go', 'gouuu']

>>> re.findall("gou{0,4}","gosseegouuusssdd")

['go', 'gouuu']

>>> re.findall("gou{4}","gosseegouuusssdd")

[]

>>> re.findall("gou{0}","gosseegouuusssdd")

['go', 'go']

>>> re.findall("gou{1}","gosseegouuusssdd")

['gou']

惰性匹配*?  只要匹配出*前面的字符的0次就不匹配了

>>> re.findall("gou*","gosseegouuusssdd")

['go', 'gouuu']

>>> re.findall("gou*?","gosseegouuusssdd")

['go', 'go']

惰性匹配+?  只要匹配出+前面的字符的1次就不匹配了

>>> re.findall("gou+","gosseegouuusssdd")

['gouuu']

>>> re.findall("gou+?","gosseegouuusssdd")

['gou']

二、字符集[]

1、或的功能

>>> re.findall("x[yz]","xyzzzxyzxssdzx")

['xy', 'xy']

>>> re.findall("x[yz]","xyzzzxzsdxzzy")

['xy', 'xz', 'xz']

>>> re.findall("x[yz]p","xypzzzxzsdxzpzy")

['xyp', 'xzp']

2、[]中的特殊符号-   匹配字母

取小写字母

>>> re.findall("[a-z]","sd67lMNVv17jB5")

['s', 'd', 'l', 'v', 'j']

取大写字母

>>> re.findall("[A-Z]","sd67lMNVv17jB5")

['M', 'N', 'V', 'B']

取大小写字母

>>> re.findall("[A-Za-z]","sd67lMNVv17jB5")

['s', 'd', 'l', 'M', 'N', 'V', 'v', 'j', 'B']

取ab后面跟一个字母 取ab后面跟0个字母或者1个字母

>>> re.findall("ab[a-z]","abclkmnbab")

['abc']

>>> re.findall("ab[a-z]?","abclkmnbab")

['abc', 'ab']

取出字符串中的小写字母连着的字母为一个整体

>>> re.findall("[a-z]+","abc56Pabm902")

['abc', 'abm']

取出字符串中的大写字母,连着为一个整体

>>> re.findall("[A-Z]+","abc56PMabRm902")

['PM', 'R']

取出字符串中的大小写字母,连着的为一体

>>> re.findall("[A-Za-z]+","abc56Pabm902")

['abc', 'Pabm']

>>> re.findall("q[a-z]*","abc56q")

['q']

>>> re.findall("q[a-z]*","abc56qr")

['qr']

>>> re.findall("q[a-z]*","abc56qrg")

['qrg']

>>> re.findall("q[a-z]+","abc56qrg")

['qrg']

>>> re.findall("q[a-z]?","abc56qrg")

3、[]里面的特殊符号^   是取反的意思

第一个字符是q 第二个字符只要不是a-z的就可以匹配出来

>>> re.findall("q[^a-z]","abc56qrg")

[]

>>> re.findall("q[^a-z]","abc56qrq6g")

['q6']

>>> re.findall("q[^a-z]","abc56qrq6gq677")

['q6', 'q6']

4、[]里面的特殊符号\    叫转义符  最牛的一个斜杠

\d   匹配任意十进制数,相当于[0-9]

\D   匹配任意非数字字符,相当于[^0-9]

\s   匹配任何空白字符,相当于[\t\n\r\f\v]

\S   匹配任何非空白字符,相当于[^\t\n\r\f\v]

\w   匹配任何字符数字字符,相当于[a-zA-Z0-9_]

\W   匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]

\b   匹配一个特殊字符边界,比如空格 & # 等

匹配下数字

>>> re.findall("\d","12+(34*6+2-5*(2-1+6))")

['', '', '', '', '', '', '', '', '', '']

>>> re.findall("\d+","12+(34*6+2-5*(2-1+6))")

['', '', '', '', '', '', '', '']

匹配下除了数字之外的

>>> re.findall("\D+","12+(34*6+2-5*(2-1+6))")

['+(', '*', '+', '-', '*(', '-', '+', '))']

匹配任何非空字符

>>> re.findall("\S+","hello gouguoqi")

['hello', 'gouguoqi']

匹配空白字符

>>> re.findall("\s+","hello gouguoqi")

[' ']

匹配任意字符和数字字符也包括_

>>> re.findall("\w","hel()*&%34dcsdg_")

['h', 'e', 'l', '', '', 'd', 'c', 's', 'd', 'g', '_']

>>> re.findall("\w+","hel()*&%34dcsdg_")

['hel', '34dcsdg_']

转义功能

>>> re.findall("www*baidu","www*baidu.com")

[]

>>> re.findall("www\*baidu","www*baidu.com")

['www*baidu']

>>> re.findall("www.baidu","wwwkbaidu.com") 这里代表是通配符

['wwwkbaidu']

>>> re.findall("www\.baidu","wwwkbaidu.com")

[]

>>> re.findall("www\.baidu","www.baidu.com")

['www.baidu']

\b匹配特殊边界

>>> re.findall("I","I am LIST")

['I', 'I']

>>> re.findall("^I","I am LIST")

['I']

>>> re.findall("^I","hello I am LIST")

[]

取出中间的大写的I

>>> re.findall(r"I\b","hello I am LIST")

['I']

>>> re.findall("I\\b","hello I am LIST")

['I']

5、取出最里面这个括号里面的元素

>>> re.findall("\([^()]*\)","12+(34*6+2-5*(2-1))")

['(2-1)']

\(    以(开头

\)   以)结尾

[^()] 中间不是括号就行

*  重复前面的0次到无穷次,就是只要里面不是括号可以是其他的无数次

>>> re.findall("\([^()]*\)","12+(34*6+2-5*(2-1+6mk))")

['(2-1+6mk)']

6、|  管道符  或的概念,是匹配2个整体

>>> re.findall("ka|a","abcka|kb")

['a', 'ka']

>>> re.findall("ka|kb","abcka|kbc")

['ka', 'kb']

>>> re.findall("ka|kc","abcka|kbc")

['ka']

7、()  分组

重复c这个字母来匹配

>>> re.findall("abc+","abcccrtfabcasdcabcc")

['abccc', 'abc', 'abcc']

把abc作为一个整体来匹配

>>> re.findall("(abc)+","abccccc")

['abc']

把abc作为一个整体来匹配,重复一次或者多次?:就是去掉括号中的优先级的

>>> re.findall("(?:abc)+","abcccrtfabcabcabcc")

['abc', 'abcabcabc']

8、re的search方法

匹配到第一个之后就不继续往下匹配了

>>> re.search("(abc)","abccccc")

<_sre.SRE_Match object; span=(0, 3), match='abc'>

>>> re.search("\d{2}","abccccc")#匹配不到则返回空

>>> re.search("\d{2}","abcccc9879")#取出来是一个对象,想要值,用group方法

<_sre.SRE_Match object; span=(6, 8), match=''>

>>> re.search("\d{2}","abcccc9879").group()

''

>>> re.search("\d{2}","abcccc9879").group()

''

通过?P<name> 进行分组<>内为组名,在用group方法打印对应的组名

>>> re.search("(?P<name>[a-z]+)\d+","gouguoqi28miaoye29beiye60").group()

'gouguoqi28'

>>> re.search("(?P<name>[a-z]+)\d+","gouguoqi28miaoye29beiye60").group("name")

'gouguoqi'

>>> re.search("(?P<name>[a-z]+)(?P<age>\d+)","gouguoqi28miaoye29beiye60").group(

"age")

''

三、re模块中的常用方法

1、re.findall("a","a bb") 返回所有满足条件的结果,放在列表里面

>>> re.findall("abc","abccccc")

['abc']

2、re.rearch("a","a bb c").group()取出来是一个对象

匹配不到则返回空, 匹配到第一个之后就不继续往下匹配了

>>> re.search("\d{2}","abcccc9879").group()

''

3、re.match("a","abc").group()通search相同,只不过仅在字符串开始出进行匹配

>>> re.match("abc","aaabccccc")

>>> re.match("abc","abccccc")

<_sre.SRE_Match object; span=(0, 3), match='abc'>

>>> re.match("abc","abccccc").group()

'abc'

4、re.split()

>>> re.split(" ","abc cc hello")

['abc', 'cc', 'hello']

>>> re.split("[ |]","abc|cc hello")

['abc', 'cc', 'hello']

>>> re.split("[ab]","asdabcd")

['', 'sd', '', 'cd']

>>> re.split("[ab]","abc")

['', '', 'c']

5、re.sub替换

>>> re.sub("\d+","A","sdfdsfgc56712MMns980")

'sdfdsfgcAMMnsA'

>>> re.sub("\d","A","sdfdsfgc56712MMns980")

'sdfdsfgcAAAAAMMnsAAA'

只匹配前4次

>>> re.sub("\d","A","sdfdsfgc56712MMns980",4)

'sdfdsfgcAAAA2MMns980'

显示出匹配出来的次数

>>> re.subn("\d","A","sdfdsfgc56712MMns980")

('sdfdsfgcAAAAAMMnsAAA', 8)

6、re.compile  编译,提前把匹配规则定义好,直接调用就行了,好处就是可以用多次

>>> com=re.compile("\d+")

>>> com.findall("sdcvf456dfg67")

['', ''] 

7、re.finditer  把数据存到迭代器里面,用一条拿一条,不浪费内存

>>> re.findall("\d","sdcvf456dfg67")

['', '', '', '', '']

>>> re.finditer("\d","sdcvf456dfg67")

<callable_iterator object at 0x0000000000D92160>

>>> ret=re.finditer("\d","sdcvf456dfg67")

>>> next(ret).group()

''

>>> next(ret).group()

''

>>> next(ret).group()

''

>>> next(ret).group()

''

特例:当有分组的时候findall优先匹配组里面的内容

>>> ret=re.findall("www\.(baidu|163)\.com","www.baidu.com")

>>> re.findall("www\.(baidu|163)\.com","www.baidu.com")

['baidu']

也可以加个?:去掉优先级

>>> re.findall("www\.(?:baidu|163)\.com","www.baidu.comaawww.163.combv")

['www.baidu.com', 'www.163.com']

python的内置模块re模块方法详解以及使用的更多相关文章

  1. Python操作SQLite数据库的方法详解

    Python操作SQLite数据库的方法详解 本文实例讲述了Python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简单介绍 SQLite数据库是一款非常小巧的嵌入式开 ...

  2. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  3. python的内置模块xml模块方法 xml解析 详解以及使用

    一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...

  4. Python实战之logging模块使用详解

    用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所 ...

  5. Python内置OS模块用法详解

    大家好,从今天起早起Python将持续更新由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解的代码与注释及动态演示.刚入门的读者千万不要错过! 很多人学习python,不知 ...

  6. python的内置模块random随机模块方法详解以及使用案例(五位数随机验证码的实现)

    1.random(self): Get the next random number in the range [0.0, 1.0) 取0到1直接的随机浮点数 import random print( ...

  7. python的内置模块之os模块方法详解以及使用

    1.getcwd() 获取当前工作路径 import os print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.p ...

  8. python os模块方法详解

    os.access() 方法使用当前的uid/gid尝试访问路径.大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试. 实例: os.chdir() 方法用于改变 ...

  9. Python学习笔记:魔术方法详解

    准备工作 为了确保类是新型类,应该把 _metaclass_=type 入到你的模块的最开始. class NewType(Object): mor_code_here class OldType: ...

随机推荐

  1. 一个可以代替冗长switch-case的消息分发小框架

    在项目中,我需要维护一个应用层的字节流协议.这个协议的每条报文都是一个字节数组,数组的头两个字节表示消息的传送方向,第三.四个字节表示消息ID,也就是消息种类,再往后是消息内容.时间戳.校验码等……整 ...

  2. 13、通过Docker-compose快速搭建Wordpress

    一.compose定义 以下定义摘自docker官网:https://docs.docker.com/compose/overview/ Compose is a tool for defining ...

  3. python图像处理 模式转化简单总结

    图像处理库PIL有九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F 1.模式“1” 模式“1”为二值图像,非黑即白.但是它每个像素用8个bit表示,0表示黑,255表示白. 2 ...

  4. 吴恩达《AI For Everyone》_练习英语翻译_待更新

    AI For Everyone https://www.coursera.org/learn/ai-for-everyone 讲师: Andrew Ng (吴恩达) CEO/Founder Landi ...

  5. Apache服务器出现Forbidden 403错误提示的解决方法总结

    在配置Linux的 Apache服务时,经常会遇到http403错误,我今天配置测试时也出现了,最后解决了,总结了一下.http 403错误是拒绝访问的意思,有很多原因的.还有,这些问题在win平台的 ...

  6. 20135234mqy-——信息安全系统设计基础第十三周学习总结

    第十一章 网络编程 11.1 客户端-服务器编程模型 基本操作:事务 当一个客户端需要服务时,向服务器发送一个请求,发起一个事务. 服务器收到请求后,解释它,并以适当的方式操作它的资源. 服务器给客户 ...

  7. 《Linux内核分析与设计》读书笔记二

    第五章 5.1 与内核通信57 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 首先它为用户空间提供了一种硬件的抽象接口,举例来说当需要读写文件的时候,应用程序就可以不去管 ...

  8. C/C+ 感触

    1.       C/C++语言开发的首选利器- C++Test       以前在windows平台下的开发,使用的框架主要是MFC,以及console工程(基于win32SDK),属于纯C/C++ ...

  9. [福大软工] Z班 个人项目自动测试结果

    个人项目第二次测试结果[9.16] 注:下表中的成绩满分为25分,正确性测试 共5个,每个3分.效率测试共 2个,每个5分. 根据数据统计分档如下, // 前为档级,后为分数. 参数为50000 0- ...

  10. ctr中的GBDT+LR的优点

    1 为什么gbdt+lr优于gbdt? 其实gbdt+lr类似于做了一个stacking.gbdt+lr模型中,把gbdt的叶子节点作为lr的输入,而gbdt的叶子节点相当于它的输出y',用这个y'作 ...