Python学习笔记:正则表达式
2015-03-03 00:00
597 查看
摘要: python中的正则表达式
并非所有的字符串处理都能用正则表达式
使用正则表达式先导入re模块
找到符合r的字串,返回迭代器对象
判断字符串的开头是否符合匹配,若符合,返回一个match对象,反之无返回值
判断字符串是否符合匹配,若符合,返回一个match对象,反之无返回值
判断字符串是否符合匹配,并且进行替换,返回替换结果
判断字符串是否符合匹配,并且进行替换,返回替换结果和替换次数
根据正则表达式分割字符串
元字符
1.字符集[ ]#可识别出hella helle helli helli hello hellu ##字符集内若加元字符,需要加\
2.行首搜索^ #加在行首##若在字符集[]内,则表示出了^后跟的字符以外的字符
3.行尾搜索$ #加在行尾
4.字符 \
4.1 加在元字符前表示转义#可匹配出该元字符
4.2 特殊用法 #预定义字符集
4.2.1数字0-9:[0-9]
4.2.2^数字0-9:[^0-9]
4.2.3空白字符:[ \t\r\n\f\v]
4.2.4非空白字符:[^ \t\r\n\f\v]
4.2.5单词字符:[0-9a-zA-Z]
4.2.6非单词字符:[^0-9a-zA-Z]
5 重复字符{},*,+,? #均针对前一个字符
5.1{m[,n]}
5.2*
5.3+
5.4? #若为+? 或*?则表示开启非贪婪模式##贪婪模式表示最大匹配,非贪婪模式表示最小匹配
若想匹配的时候无视大小写,可在编译正则表达式的时候加入re.I
返回匹配开始的位置start()
返回匹配结束的位置end()
返回一个元组,其中包含了匹配开始和结束位置span()
在实际应用中
将match object保存在一个变量中,检查其是否为None
使得正则对大小写不敏感
做本地化识别匹配#不太懂
使得匹配的时候,待匹配字符串的换行符被无视
使得匹配的时候,正则表达式的换行符被无视
若加(),正则表达式'\w*@\w*.(com|cn|org)'表示”若干个单词字符@若干个单词字符.可能是(com)也可能是(cn)也可能是(org)“
若不加(),正则表达式'\w*@\w*.com|cn|org'表示”可能是(若干个单词字符@若干个单词字符.com)也可能是(c)n也可能是(org)“
分组后,findall优先返回分组内部分的匹配。
并非所有的字符串处理都能用正则表达式
使用正则表达式先导入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优先返回分组内部分的匹配。
相关文章推荐
- Python学习笔记(五)正则表达式
- 基于python的正则表达式学习笔记
- (转)Python爬虫学习笔记(2):Python正则表达式指南
- Python学习笔记 ——正则表达式初识
- 【python学习笔记】用正则表达式从含中文的网页中提取数据(含编码转换)
- Python基础教程 正则表达式 学习笔记
- python 学习笔记(5)用户自定义类正则表达式
- python学习笔记4-正则表达式
- Python学习笔记(四):面向对象、正则表达式(快速入门篇)
- python 正则表达式 学习笔记(不断补充ing)
- python 学习笔记 10 -- 正则表达式
- Python 学习笔记 正则表达式
- Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)
- 基于python的正则表达式学习笔记
- Python学习笔记(十):Python正则表达式
- Python之学习笔记(正则表达式)
- python的正则表达式学习笔记
- Python 学习笔记 (5)—— 正则表达式
- python学习之正则表达式笔记
- Python学习笔记<正则表达式与python>