您的位置:首页 > 编程语言 > Python开发

Python学习笔记:正则表达式

2015-03-03 00:00 597 查看
摘要: python中的正则表达式

并非所有的字符串处理都能用正则表达式

使用正则表达式先导入re模块

import re


**模块级函数: **

找到符合r的字串,返回列表

re.findall(r,str)

找到符合r的字串,返回迭代器对象

re.finditer(r,str)

判断字符串的开头是否符合匹配,若符合,返回一个match对象,反之无返回值

re.match(r,str)

判断字符串是否符合匹配,若符合,返回一个match对象,反之无返回值

re.search(r,str)

判断字符串是否符合匹配,并且进行替换,返回替换结果

re.sub(r'[abc]','o','lalala')#返回值为'lololo'

判断字符串是否符合匹配,并且进行替换,返回替换结果和替换次数

re.subn(r'[abc]','o','lalala')#返回值为'lololo'

根据正则表达式分割字符串

re.split(r'[\+\-\*]','123-456+789*000')#返回值为['123', '456', '789', '000']


字符匹配

普通字符

re.findall(r'hello','hello world')


元字符

1.字符集[ ]#可识别出hella helle helli helli hello hellu ##字符集内若加元字符,需要加\

re.findall(r'hell[aeiou]','hello world')

2.行首搜索^ #加在行首##若在字符集[]内,则表示出了^后跟的字符以外的字符

re.findall(r'^h','hello world')

3.行尾搜索$ #加在行尾

re.findall(r'ld$','hello world')

4.字符 \

4.1 加在元字符前表示转义#可匹配出该元字符

re.findall(r'\$','123$')

4.2 特殊用法 #预定义字符集

4.2.1数字0-9:[0-9]

\d

4.2.2^数字0-9:[^0-9]

\D

4.2.3空白字符:[ \t\r\n\f\v]

\s

4.2.4非空白字符:[^ \t\r\n\f\v]

\S

4.2.5单词字符:[0-9a-zA-Z]

\w

4.2.6非单词字符:[^0-9a-zA-Z]

\W

5 重复字符{},*,+,? #均针对前一个字符

5.1{m[,n]}

re.findall(r'\d{11}',tel)#重复查询数字11次,匹配11位电话号码

re.findall(r'\d{8,11}',tel)#重复查询数字8-11次,匹配8位到11位电话号码

5.2*

re.findall(r'\d*',tel)#重复查询数字0到20亿次

5.3+

re.findall(r'\d+',tel)#重复查询数字1到20亿次

5.4? #若为+? 或*?则表示开启非贪婪模式##贪婪模式表示最大匹配,非贪婪模式表示最小匹配

re.findall(r'\d?',tel)#重复查询数字0或1次


正则的编译

编译后运行是为了提高匹配速度

r=r'hello'
r_c=re.compile(r)
r_c.findall('hello world')

若想匹配的时候无视大小写,可在编译正则表达式的时候加入re.I
r=r'hello'
r_c=re.compile(r,re.I)
r_c.findall('HeLLo world')


match object实例用法

返回被re匹配的字符串group()

x=re.match(r'a{4}','aaaaaaaa')

x.group() #返回值为‘aaaa’

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

x.start()#返回值为0

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

x.end()#返回值为4

返回一个元组,其中包含了匹配开始和结束位置span()

x.span()#返回值为(0,4)

在实际应用中

将match object保存在一个变量中,检查其是否为None

if x:
print('The match found')
else:
print('None match')


编译标志#统一加在re,findall('r_p','string',re.S/I/L/M/X)

使得.可以匹配包括换行符在内的字符

re.S

使得正则对大小写不敏感

re.I

做本地化识别匹配#不太懂

re.L

使得匹配的时候,待匹配字符串的换行符被无视

re.M

使得匹配的时候,正则表达式的换行符被无视

re.X


分组

用()分组后,如下代码:

re.findall('\w*@\w*\.(com|cn|org)','quyi_qy@qq.com')#返回值为()内的com

若加(),正则表达式'\w*@\w*.(com|cn|org)'表示”若干个单词字符@若干个单词字符.可能是(com)也可能是(cn)也可能是(org)“

若不加(),正则表达式'\w*@\w*.com|cn|org'表示”可能是(若干个单词字符@若干个单词字符.com)也可能是(c)n也可能是(org)“

分组后,findall优先返回分组内部分的匹配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息