Day-13: 正则表达式

  正则表达式:正则表达式

  因为程序中对字符串进行操做的状况实在太多,因此就诞生了正则表达式。它就是用来匹配字符串的。学习

  \d匹配一个数字,\w匹配一个字母或者数字,\s匹配一个空格(包括Tab等空白符)spa

  *表示任意个字符,+表示一个字符,?表示0或者1个字符,{n}表示n个字符,{n,m}表示n-m个字符(数量表示符号要放在字符表示符号的后面)3d

  []里面表示范围code

  [0-9a-zA-Z\_]能够匹配一个数字、字母或者下划线;对象

  A|B能够匹配A或B,^表示行的开头,$表示行的结束。blog

  正则表达式自身要转义表示,使用r''后就不用考虑正则表达式的转义。字符串

  re模块:get

>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object at 0x1026e18b8>
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
>>>

  match()方法判断是否匹配,若是匹配成功,返回一个Match对象,不然返回Noneit

>>> re.split(r'[\s\,\;]+', 'a,b;; c  d')
['a', 'b', 'c', 'd']

  正则表达式中有()表示提取有分组,能够在match对象上用group()方法提取出子串来,group(0)表示原始字符串,group(1)表示第1个字符串。

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object at 0x1026fb3e8>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

  re模块中方法运行时会先编译正则表达式,再去匹配。若是一个正则表达式要重复使用几千次,能够先预编译该表达式,以后就不须要编译该步骤了,直接匹配。

>>> import re
# 编译:
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')

  贪婪原则:正则表达式匹配时默认是贪婪匹配,尽量多的匹配。

>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')

因为\d+采用贪婪匹配,直接把后面的0所有匹配了,结果0*只能匹配空字符串。

必须用?换成非贪婪模式采用匹配出

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')

  注:本文为学习廖雪峰Python入门整理后的笔记

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息