Python五周二次课

一、正则表达式

. :匹配任意一个字符
^ :匹配以什么开头的字符,如果放在中括号中表示取反,如 ^abc 表示匹配以 abc 开头的字符,[^abc] 表示匹配 abc 之外的字符
$ :匹配以什么结尾的字符
* :匹配零个或多个星号前面的字符,如 abc* 可以匹配 ab 、abc 、abcc 、abccc 等等
+ :匹配一个或多个加号前面的字符,如 abc+ 可以匹配 abc 、abcc 、abccc 等等
? :匹配零个或一个问号前面的字符,如 abc? 只能匹配 ab 、abc
\ :用于转义,比如我要匹配 $ 这个字符,但是 $ 用于匹配以什么结尾的字符,因此我就可以用 \$ 来匹配 $ 这个字符
| :表示‘或者‘,比如 ab|cd 可以匹配 ‘ab‘ 或 ‘cd‘
{} :匹配指定个花括号前面的字符,如 ab{2} 可以匹配 abb ,也可以是一个范围,如 ab{1,4} 可以匹配 ab 、abb 、abbb 、abbbb
[] :匹配中括号中的任意一个字符,如 [0-9] 表示匹配 0~9 中的任意一个数字
() :如果用括号括起来表示一个整体,如 (ab){2} 把 ab 当成一个整体,只能匹配 abab ,另外还有(?P<name>....) 的形式,我们
       知道用括号括起来的表示一个整体,比如 (abcdefg) 是一个整体,但如果括号里面的内容很长很长,那么我们访问这个整体的时候
       是通过给这个整体取个别名的方式,即 (?P<name>....) 的方式,如 (?P<a>(abcdefg)) 表示把 (abcdefg) 这个整体取个别名 a ,
       当我们访问的时候访问 a 就相当于访问 (abcdefg) ,在正则中这通常称为分组
\d :匹配任何数字,相当于 [0-9]
\D :匹配非数字字符,相当于 [^0-9]
\s :匹配任何空白字符,如空格、Tab制表符、换行符等
\S :匹配任何非空白字符
\w :匹配所有的字母和数字,相当于 [a-zA-Z0-9]
\W :匹配所有的非字母和数字,相当于[^a-zA-Z0-9]

二、re 模块

re.findall() :用于从一个字符串中匹配指定的字符

In [18]: import re

In [32]: re.findall(r‘ab‘, ‘abcdabcd‘)     # 表示从字符串‘abcdabcd‘中匹配包含‘ab‘字符,结果以列表的形式返回
Out[32]: [‘ab‘, ‘ab‘]                      # r‘ab‘中的r表示原生字符,即引号里面是什么就匹配什么,比如r‘\n‘表示匹配‘\n‘这个字符串而不是匹配换行符

In [19]: re.findall(r‘^ab‘, ‘abcdefg‘)     # 表示从字符串‘abcdefg‘中匹配以‘ab‘开头的字符,结果以列表的形式返回
Out[19]: [‘ab‘]

In [52]: re.findall(r‘ab‘, ‘abcdABcd‘, re.I)    # re.I 是一个标记,表示匹配的时候不区分大小写
Out[52]: [‘ab‘, ‘AB‘]
In [54]: re.findall(r‘foo$‘, ‘foo\nfoo\nfoo‘, re.M)    # re.M 用于对每一行进行匹配,如果不加的话只会打印一个‘foo‘,也就是忽略了‘\n‘的换行作用
Out[54]: [‘foo‘, ‘foo‘, ‘foo‘]

re.match() :用法与 re.findall() 一致,但只匹配开头的位置,且 re.match() 返回的是一个对象,需要用 group() 方法来查看所匹配到的内容

In [32]: re.findall(r‘ab‘, ‘abcdabcd‘)     # findall()可以匹配到所有指定的字符
Out[32]: [‘ab‘, ‘ab‘]

In [34]: m = re.match(‘ab‘, ‘abcdabcd‘)    # match()只能匹配开头的字符

In [35]: m.group()
Out[35]: ‘ab‘

re.search() :用法与 re.findall() 一致,但 re.findall() 会匹配所有包含的字符,而 re.search() 只匹配一个包含的字符

In [42]: re.findall(r‘ab‘, ‘abcdabcd‘)
Out[42]: [‘ab‘, ‘ab‘]

In [43]: m = re.search(r‘ab‘, ‘abcdabcd‘)

In [44]: m.group()    # 同理用group()方法查看
Out[44]: ‘ab‘

re.sub() :用于替换字符串

In [45]: re.sub(r‘ab‘, ‘AB‘, ‘abcdabcd‘)               # 表示将字符串‘abcdabcd‘中的‘ab‘都替换成‘AB‘
Out[45]: ‘ABcdABcd‘

In [46]: re.sub(r‘ab‘, ‘AB‘, ‘abcdabcd‘, count=1)      # count=1 可以指定只替换一次
Out[46]: ‘ABcdabcd‘

re.compile() :用于将正则表达式编译成对象,并用它们来进行匹配

In [48]: p = re.compile(r‘ab‘)    # 先将要匹配的内容(即正则表达式)进行编译

In [49]: p.findall(‘abcdabcd‘)    # 这里就可以直接匹配,提高效率
Out[49]: [‘ab‘, ‘ab‘]

In [50]: p.search(‘abcdabcd‘).group()
Out[50]: ‘ab‘

In [51]: p.match(‘abcdabcd‘).group()
Out[51]: ‘ab‘

re.split() :可以使用正则来分割指定的字符串

In [30]: re.split(r‘\d‘, ‘one1two2three3four‘)
Out[30]: [‘one‘, ‘two‘, ‘three‘, ‘four‘]

re.finditer() :用法与 re.findall() 一致,但 re.findall() 返回的是一个列表,re.finditer() 返回的是一个对象,就好比 print 与 return 的区别

In [42]: re.findall(r‘ab‘, ‘abcdabcd‘)
Out[42]: [‘ab‘, ‘ab‘]

In [43]: re.finditer(r‘ab‘, ‘abcdabcd‘)
Out[43]: <callable-iterator at 0x29cf650>

In [44]: for i in re.finditer(r‘ab‘, ‘abcdabcd‘):
   ....:     print(i.group())
   ....:
ab
ab

时间: 2024-07-31 01:36:26

Python五周二次课的相关文章

十五周二次课、三次课(4月3日、4月4日)

不停库不锁表在线主从配置 http://blog.sina.com.cn/s/blog_6f2108260101kwxv.html mysql主从常见问题 1.从库的mysql命令行下执行:show slave status \G,查看三个状态:            Slave_IO_Running: Yes  表示从库的同步IO进程正常        Slave_SQL_Running: Yes 表示从库的执行同步过来SQL语句的进程正常        Seconds_Behind_Mast

十五周二次课

18.6 负载均衡集群介绍 主流开源软件LVS.keepalived.haproxy.nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用 keepalived的负载均衡功能其实就是lvs lvs这种4层的负载均衡是可以分发TCP协议,web服务是80端口,除了分发80端口,还有其他的端口通信的,比如MySQL的负载均衡,就可以用LVS实现,而nginx仅仅支持http,https,mail,haproxy:haprox

python五十九课——正则表达式的拓展内容

演示正则表达式的拓展内容:函数:finditer(regex,string,[flags=0]):参数:和match.search.findall一样理解功能:将所有匹配的数据封装为一个一个的match对象,然后以iterator返回 import re str1 = 'i love shanghai shanghai shanghai so much' regex = 'shanghai' it = re.finditer(regex,str1) print(it,type(it)) '''

python五十八课——正则表达式(分组)

演示正则中的替换和切割操作:在这之前我们先学习一个分组的概念: 分组:在正则中定义(...)就可以进行分组,理解为得到了一个子组好处:1).如果正则中的逻辑比较复杂,使用分组就可以优化代码的阅读性(更有层级感)2).一旦进行了分组,在正则表达式的后半部分内容中很有可能需要引用子组中的内容: 一旦引用了组,那么这两部分的内容(值)就可以保持一致了 import re phone='62589999' regex=r'd{4}(d)r{3}' #r'...()...()...()..' print(

python五十八课——正则表达式(切割)

切割:split(regex,string):返回一个列表对象 import re str1='i love shenzhen so much' regex=r' +?' lt=re.split(regex,str1) print(lt) str2='dsafsa2341241dfakdsf34242dsafasfd______3214123fdsafas2131dsafas' regex=r'd+' lt=re.split(regex,str2) print(lt) ''' 补充案例:和替换有

python五十八课——正则表达式(替换)

替换:sub(regex,repl,string,count,[flags=0]): 替换数据,返回字符串(已经被替换完成后的内容)subn(regex,repl,string,count,[flags=0]): 替换数据,返回元祖对象,此元祖有两个元素 第一个元素记录了替换以后的字符串内容, 第二个元素记录了被替换的次数(count的值)参数:regex:正则规则(字符串)repl:需要被替换成的内容(new)string:需要被替换的内容(原串)count:需要被替换的个数,默认全部替换 i

七周二次课(1月23日) 10.6 监控io性能 10.7 free命令 10.8 ps命令 10.9 查看网络状态 10.10 linux下抓包

七周二次课(1月23日)10.6 监控io性能10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包 =====================================================================================================================================================================================

【Python五篇慢慢弹(5)】‘类’过依然继续前行,直至ending再出发

‘类’过依然继续前行,直至ending再出发 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础.本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pychar

【Python五篇慢慢弹(4)】模块异常谈python

模块异常谈python 作者:白宁超 2016年10月10日12:08:31 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础.本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pycharm编辑器的使用和配置: