regular expression
. 表示任意的字符 ,除了换行符号
[] 表示范围
* 表示字符可以出现>=0次
+ 表示字符可以出现>=1次
? 表示0 或者1 次。
[^] 表示非字符集合
| 表示左右表达式任意一个
{m}表示对前面的一个字符进行扩展m次数,例如 ab{2} 匹配的是abb
{m,n}表示的是扩展m到n次数
^匹配开头 ,例如^abc 表示abc在开头的部分,与之对应的是$
() 分组标记内部只能使用|操作符号 例如(abc|de)表示匹配abc,或者是de
\d 匹配0-9
\w 相当于[A-Za-z0-9]
实例
py{:3}n
匹配的是 pn ,pyn,pyyn,pyyyn
^[A-Za-z]+$ 将会匹配由字母组成的字符串
^-?\d+$ 匹配整数形式的字符串
在re库中使用raw string 类型表示正则表达式,表示为 r’text’
(’'不会被解释为转义字符)
re库的功能部分函数
(1) re.search() 返回match对象
(2) re.match() 返回match 对象
(3) re.findall() 以列表类型返回全部的子串
(4) re.split() 按照正则表达式的结果进行分割,返回列表类型
(5)sub()替换,并且返回替换之后的结果
# search 实例
re.search( pattern ,string ,flags=0)
# pattern 是正则表达式表示 ,flags是控制标记,string 是待匹配的string
import re
match= re.search(r'^[a-z]+$','html')
# match()实例
re.match(pattern, string ,flags=0)
# 参数同search
import re
a=re.match(r'[a-z]+$','34html')
这个例子中a是空的,match 将会从起始位置进行匹配
# split
a=r'[1-9]\d{2}'
c=re.split(a,'cte123 cdr134')
#sub实例
c=re.sub(r'[1-9]\d{2}',':ok ','hello123 world345')
print(c)
re库中含有等价的方法,将raw string 编译为正则表达式的 对象,再使用这个方法
import re
p=re.compile(r'[1-9]\d{3}')
# raw string 不是正则表达式
s=p.search('helloworld 1234')
#面向对象的方法
match对象
c=re.search(r'[1-9]\d{2}','hello123')
print(type(c))
# 结果是<class '_sre.SRE_Match'>
c=re.findall(r'[1-9]\d{2}','hello123 world 345')
print(type(c))
# 结果是<class 'list'>
属性方法
(1).group(0)匹配之后的字符串
(2).start ()匹配的字符串开始位置
(3).end()结束位置
(4).string 带匹配的string
(5).re 正则表达式
c=re.search(r'[1-9]\d{2}','hello123 world 345')
print(c.string)
#hello123 world 345
print(c.re)
#re.compile('[1-9]\\d{2}')
print(c)
#<_sre.SRE_Match object; span=(5, 8), match='123'>
print(c.group(0))
# 123
贪婪匹配
引言:re库默认是贪婪匹配,
实例
p=re.search(r'[1-9]*','23467')
print(p.group(0))
# 23467
p=re.search(r'py.*?c','py2c4c67c')
print(p.group(0))
# py2c
#在表示长度操作符后面加入?