<Python高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>

1.头文件

import re

2.re.findall("stra","strb",匹配模式)  在strb中找stra,返回一个列表,列表中为所有的匹配内容

>>> re.findall("juruo","iamjuruoiamnotjuruo")
[‘juruo‘, ‘juruo‘]
>>> re.findall("juruo","iamyzw")
[]
>>> re.search("ab","cdabcd")
<_sre.SRE_Match object; span=(2, 4), match=‘ab‘>
>>> re.search("ab","cdabcd").group()
‘ab‘

2re.search("stra","strb",匹配模式)  匹配一次,返回一个search对象

>>> re.search("ab+","abab")
<_sre.SRE_Match object; span=(0, 2), match=‘ab‘>

3re.match("strb","stra",[匹配模式]) 匹配一次,且只对开头进行匹配,返回一个match对象

>>> re.match("abc","abcde")
<_sre.SRE_Match object; span=(0, 3), match=‘abc‘>
>>> re.match("bcd","abcd") #匹配不成功返回空

search match findall的匹配模式:

re.I 不区分大小写

>>> re.search("AB","12ab",re.I).group()
‘ab‘
>>> re.match("abc","ABC",re.I).group()
‘ABC‘
>>> re.findall("ab","abAB",re.I)
[‘ab‘, ‘AB‘]

re.S 使.匹配包括换行符在内的所有字符

>>> re.search(".","\n",re.S).group()
‘\n‘
>>> re.match("abc.","abc\n").group()
Traceback (most recent call last):
  File "<pyshell#75>", line 1, in <module>
    re.match("abc.","abc\n").group()
AttributeError: ‘NoneType‘ object has no attribute ‘group‘  (报错)
>>> re.match("abc.","abc\n",re.S).group()
‘abc\n‘
>>> re.findall(".","abc\n",re.S)
[‘a‘, ‘b‘, ‘c‘, ‘\n‘]

4.

rearch,match对象的方法

group(【参数】) 返回匹配的字符串

start() 返回匹配开始的位置

end() 返回匹配结束的位置

span() 返回一个元组包含匹配(开始,结束)的位置groups() 举个栗子说明
>>> re.search("a","bac").group()
‘a‘
>>> re.search("a","bac").start()#左闭
1
>>> re.search("a","bac").end()  #右开
2
>>> re.search("a","bac").span() #左闭右开
(1, 2)
>>> re.match("a","abc").group()
‘a‘
>>> re.match("a","abc").start()  #左闭
0
>>> re.match("a","abc").end()    #右开
1
>>> re.match("a","abc").span()   #左闭右开
(0, 1)

group()

>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group()  #默认为0
‘12abcABCD‘
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(0)   #所有匹配的内容
‘12abcABCD‘
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(1)   #返回其中第一组匹配的内容
‘12‘
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(2)   #返回其中第二组匹配的内容
‘abc‘
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(3)    #返回其中第三组匹配的内容
‘ABCD‘
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(1,2)  #返回其中第一二组匹配的内容
(‘12‘, ‘abc‘)
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(1,2,3)  #返回其中第一二三组匹配的内容
(‘12‘, ‘abc‘, ‘ABCD‘)
>>> re.search("([0-9]*)([a-z]*)([A-Z]*)","12abcABCD").group(2,3)   #返回其中第二三组匹配的内容
(‘abc‘, ‘ABCD‘)

5 sub()  替换 re.sub("旧的","新的","str",[次数])  次数可以省略,不写时表示替换所有

>>> re.sub("g.t","have","I get A ,I got B, I gut C")
‘I have A ,I have B, I have C‘
>>> re.sub("g.t","have","I get A ,I got B, I gut C",1)
‘I have A ,I got B, I gut C‘
>>> re.sub("g.t","have","I get A ,I got B, I gut C",2)
‘I have A ,I have B, I gut C‘
>>> re.sub("g.t","have","I get A ,I got B, I gut C",3)
‘I have A ,I have B, I have C‘

6.subn 替换,并返回替换的次数 re.sub("旧的","新的","str",[次数]) 不写次数表示替换所有

>>> re.subn("juruo","yzw","I am juruo.My QQname is juruo,My csdn naame is juruo")
(‘I am yzw.My QQname is yzw,My csdn naame is yzw‘, 3)
>>> re.subn("juruo","yzw","I am juruo.My QQname is juruo,My csdn naame is juruo",2)
(‘I am yzw.My QQname is yzw,My csdn naame is juruo‘, 2)

7.compile 把正则表达式规(stra)则编成一个对象,这样可以重复利用  re.compile("正则表达式规则")

>>> a=re.compile("b.c")
>>> re.findall(a,"bac")
[‘bac‘]
>>> a.findall("bac")  #也可以用生成的对象来调用finall方法,实际上a是在re上封装了这个规则..所以可以用findall
[‘bac‘]

8.split分割   splirt("规则","str")

‘
>>> re.split("\\d+","ab1ab2ab")
[‘ab‘, ‘ab‘, ‘ab‘]
>>> a=re.compile("\\d+")  #将正则表达式规则封装成对象a
>>> re.split(a,"ab1ab2ab")  #使用对象a作为规则
[‘ab‘, ‘ab‘, ‘ab‘]
>>> a.split("ab1ab2ab")    #a实际上是在re中封装规则得到的,所以可以使用split
[‘ab‘, ‘ab‘, ‘ab‘]
>>> re.split("[ab]","cacbc")
[‘c‘, ‘c‘, ‘c‘]

5.二元字符 (11个)

. ^  $ * + ?  {} [] | () \

【.】通配符 匹配一个除了换行符外的任何字符

【^】  re.finadall("^stra","strb")如果stra在strb的开头位置,则匹配成功

例子:

>>> re.findall("^123","123456")
[‘123‘]
>>> re.findall("^123","4123")
[]

【$】 re.findall("stra$",strb"") 如果stra在strb的末尾则匹配成功

例子:

>>> re.findall("456$","123456")
[‘456‘]

【* 】重复到多次   (这是一种贪婪匹配)

>>> re.findall("abc*","abc")
[‘abc‘]
>>> re.findall("abc*","abcccccc")   #贪婪匹配:它会匹配c最多的那个
[‘abcccccc‘]

【+】 重复1到多次

>>> re.findall("ax+","axxxx")
[‘axxxx‘]

【?】 重复0次或1次

>>> re.findall("ax?","a")
[‘a‘]
>>> re.findall("ax?","ax")
[‘ax‘]
>>> re.findall("ax?","axx")
[‘ax‘]

【{}】重复指定次数   {x}重复x次  {a,b} 匹配[a,b]次(闭区间)

>>> re.findall("ax{3}","axxxxxx")
[‘axxx‘]
>>> re.findall("ax{0,3}","aaxaxxaxxx")
[‘a‘, ‘ax‘, ‘axx‘, ‘axxx‘]

【\】

\后面跟元字符(正则表达式特殊字符),会去除它们的特殊功能

\\引用序号对应字组所匹配的字符串

>>> re.search("(abc)(def)\\1","abcdefabc").group()   #这里(abc)是第1组 d(ef)是第2组
‘abcdefabc‘
>>> re.search("(abc)(def)\\2","abcdefdef").group()
‘abcdefdef‘

\d 匹配【0,9】闭区间

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

\s匹配任何空白字符  相当于:\n \t 空格  \r \f \v

\S匹配任何非空白字符

\w匹配任何字母数字字符 相当于【a-z】并【A-Z】并【0-9】

\W匹配任何非字母数字字符

\b匹配一个单词的边界,其实是匹配字符和空格之间的位置

就是在你匹配单个单词的时候,如果不是单个单词就不匹配

例如:匹配I的时候有很多单词中都有I 但我指向匹配单个I

>>> re.search("\\bI\\b","IBIc I ").group()
‘I‘

【[]】 其中的一个字符 [abcdef]匹配其中的一个字符  re.findall("[stra]","strb") 一个一个字符的遍历字符串strb,然后和stra的字符进行匹配

>>> re.findall("[abcdef]haha","ahaha")
[‘ahaha‘]
>>> re.findall("[abcdef]haha","abhaha")
[‘bhaha‘]

[]中的(元字符)特殊字符全部变成普通字符

>>> re.findall("a[.]b","aab")
[] #没有起到通配符的作用
>>> re.findall("a[.]b","a.b")  #和.匹配
[‘a.b‘]

[]中-起到至的作用

>>> re.findall("[a-z]","abcdefg")#一个一个字符遍历"abcdefg"进行匹配

[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘] 
>>> re.findall("[0-9]","0123456789") [‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘]

[]中^起到非的作用  [^1-9]除了1到9的数字都被匹配

>>> re.findall("[^1-9]","12345abc")
[‘a‘, ‘b‘, ‘c‘]

【()】作为一个整体进行处理

【|】或

6.非贪婪

从前面看 ? + *都是贪婪匹配

首先看贪婪模式

>>> re.search("a\d+","a23b")
<_sre.SRE_Match object; span=(0, 3), match=‘a23‘>
>>> re.search("a\d+","a23b").group()
‘a23‘
>>> re.search("a\d+","a2312345").group()
‘a2312345‘

非贪婪模式

>>> re.search("a\d+?","a2312345").group()
‘a2‘
>>> re.search("a\d*?","a2312345").group()
‘a‘

注意有这种特殊情况:

需要费贪婪匹配的东西夹在中间是不行的,会匹配所有的

>>> re.search("a(\d+?)b","a23b").group()
‘a23b‘

7.

时间: 2024-10-12 14:13:33

<Python高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>的相关文章

PYTHON高级全栈开发工程师-老男孩教育

PYTHON高级全栈开发工程师 最近开班日期:2016年4月17号                               课程周期:4至4.5个月 学习方式:全脱产面授学习(周一至周五,早9:30-晚9:00) 课程收费:RMB15800 适用人群:应届专科.本科毕业生及其它对从事编程开发感兴趣的人群 学员年龄:18-30岁之间 平均就业工资:8-12K 课程咨询QQ:41117397  70271111  80042789  41117483      技术讨论群:         Py

老男孩Python高级全栈开发工程师【真正的全套完整无加密】

课程大纲 老男孩python全栈,Python 全栈,Python教程,Django教程,Python爬虫, scrapy教程,python高级全栈开发工程师,本套教程,4部分完整无缺,课程完结,官方售价6800元. 课程全部都是不加密,全部都有声音-不是网上那种几块钱十几块钱那种加密没有声音或者课程不全,贪便宜花冤枉钱不说都会严重影响学习,耽误大量时间! 本套全栈课程,不说完全媲美线下教学,只要你肯坚持,不会比面授差太多-坚持学完找一份python开发类的工作完全没问题,另外对于学习方面的投资

不做全栈开发工程师

最近老是听到一个词:全栈开发工程师,英文是:Full Stack Developer.仔细分析,所谓的全栈开发工程师或许也分为两种:一种是做小公司小网站,一个人全包,什么都做,自然什么都会:另一种是大公司大网站,需要整体架构设计师,分工明细,很多人做,但需要人统筹.显然这是两种境界,初级水平是无一精通:高级是无一不精. 在十几二十年前,一个人一台电脑,搞定一个软件,一个网站.那个时候没有那么多细分,也就是客户端-服务器,或者浏览器端-服务器端,最多加上一个数据库端.我有一位老领导,一直沉浸在二十

《从芯片到云端:Python物联网全栈开发实践(刘凯著)》pdf

?? 链接: https://pan.baidu.com/s/1V--A49YSmvQ5Je6ot9d4zQ 提取码: sgeu 总体而言,在环境偏向浮躁的当下,作者这本书还是充分体现出工程师的严谨与认真,不失为一本佳作. 这本书从立意到内容在当下都不可多得.既有关物联网开发,又结合python实践.在写作意图上,作者更试图通过python一种语言贯穿物联网开发的各个环节. 内容简介 · · · · · · 物联网开发重新定义了“全栈开发”的范围.Python作为一门快速发展的语言,已经成为系统

web全栈开发工程师的趋势、价值

随着技术的发展.用户量的增加.客户端种类变多,每一个小小的细节都需要优化和考虑.在海量的访问量面前,也许改变一个按钮的位置和颜色就能影响上千万次的用户体验.如今的互联网产品已不是以一己之力就可以完成的乐高积木了,Web开发需要以某种可控的方式来管理.于是,所有认真对待互联网产品的大公司都引入了流水线开发流程,在这条流水线上诞生了多个非常专业的职位. 1. 岗位需要"T"型人才 要求你不仅"一样精"更要在"一样精"的基础上"百样通&quo

发现自己就是个全栈开发工程师

回头看来,发现自己干过不少的事.不过目前专注于机器学习,深度学习方面,发现这才是自己的兴趣所在,如无意外,将长期专注于这方面. 机器学习,深度学习相关经历: 1 玩过基于HOG特征的行人检测,分别在JAVA,OPENCV,CUDA做个实验: 2 玩过TLD,研究过C++版本的源代码: 3 用C++实现过卷积神经网络的基础框架,含CPU版本和GPU版本(cuda实现): 4 研究过caffe卷积神经网络的源代码: 5 在coursera上过andrew ng的机器学习的课程: WEB开发经历: 1

全栈开发工程师,就是个神话~

原文地址 这篇文章很有道理,如果放在十几年以前,说全栈工程师,还可以,那时的 Web 站点的访问量不是很大,大都是一台 Web 服务器和一台数据库服务器,采用分离的结构,更有甚者,Web 服务器和数据库服务器是同一台服务器,一个工程师,就可以完成所有的工作,包括,用 Oracle 或 MySQL 建立数据库,编写 Web 的前端和后端,前端包括 HTML,CSS,JavaScript,后端则可采用 Java,PHP,.NET,更有用 Lisp 的.现在的大网站,都是由当初的小网站起步的,即便是

Vue+Node+MongoDB高级全栈开发

第1章 本地与服务器环境准备介绍微信公众号/小程序/域名/服务器的申请选购流程,在本地与线上服务器分别对项目的运行环境进行搭建部署,如 Node.js/Vue/Yarn/PM2/Nginx/MongoDB 等等,同时会来简单介绍下从本地通过 PM2 利用 Git 仓库直接往线上服务器部署以及 Nginx 端口映射解析特定域名的实现流程,最终准备好本地线上和外部业务环境为开发...1-1 导学1-2 课程简介1-3 申请认证公众服务号与小程序1-4 选购域名与备案解析域名1-5 选购配置服务器1-

自学Python全栈开发第三次笔记(pycharm的使用)

这几天学习了pycharm的使用. 模板:新建:File--->settings--->File and code Templates--->PythonScript  添加头部 #!/user/bin/env python #-*-coding:utf-8-*-                      --------------------->ok 文字大小 File--->settings--->Editor--->Font--->size    1