[Python]第六课笔记--正则表达式
2013-04-13 15:46
363 查看
培训第六课 re的使用
re使用流程:模式串->表达式对象->匹配目标文本
\ :转义字符 当我们把元字符当做普通字符去匹配的时候
[] :字符集合匹配
\d :数字匹配 0-9
\D :非数字的匹配[^0-9]
\s :非空白字符[ \t\r\n\f\n]
\S :f非空白字符[^\s]
\w :字母数字[A-Za-z0-9]
\W :非字母数字[^\w]
#说白了,大写和小写的正好是补集的关系
#使用compile会快一点
>>> p = re.compile(r'nihao')
>>> type(p)
<type '_sre.SRE_Pattern'>
#匹配字符前面加r,少一些不必要的麻烦
In [10]: rs = p.match('abc abcde abcdd')
#使用mathch方法,匹配成功返回一个mactch对象,没有成功就返回None
In [11]: print rs
<_sre.SRE_Match object at 0x03638918>
In [12]: rs.group() #mathc只返回一个匹配到的字符
Out[12]: 'abc'
?:一次或者0次
* :任意次数,0次,1次,多次
{m} :匹配前一个字符m次
{m,n}: 匹配前一个字符m到n次
数量词?:非贪婪模式 ex:[i]*?
In [14]: p = re.compile('[abc]{2,3}') #默认是贪婪模式,总是匹配到最大限度
In [15]: p.findall('abcabcbc')
Out[15]: ['abc', 'abc', 'bc']
In [16]: p = re.compile('[abc]{2,3}?') #加了?以后变成非贪婪,最小匹配就返回
In [17]: p.findall('abcabcbc')
Out[17]: ['ab', 'ca', 'bc', 'bc']
$ :匹配字符串的结尾,多行就匹配每一行的结尾
\A :仅匹配字符串的开头
\Z :仅匹配字符串的末尾
\b :匹配 \w \W之间
(..) :分组匹配,匹配返回值
(?...):分组匹配,不返回匹配值
\<num> :引用到编号为num的分组匹配到的串
(?P<name>):分组命名
(?p=name): 引用分组,不提取值
#分组操作和group字样的方法关系密切
#不分组不提取
In [52]: re.findall(r'(?:a)b','abc')
Out[52]: ['ab']
#分组命名
In [54]: m = re.match(r'(?P<a>a)(b)','abc')
In [55]: m.groups()
Out[55]: ('a', 'b')
In [56]: m.groupdict()
Out[56]: {'a': 'a'}
(?iLmsux) :不同模式
(?#...) :#注释
(?=...) :之后满足才返回字符
(?!...) :
(?<=...) :
(?<!...) :
(?(id/name)yes|no) :
In [69]: re.findall(r'a(?=\d)','a3 a4')
Out[69]: ['a', 'a']
re.M 多行模式改变为^ $的行为,忽略换行
re.S .任意匹配模式,包括换行
re.U 使用\w\W\b\B\s\S\d\D取决于UNIcode字符属性
re.X 详细模式
re.L 使用预订字符串类\w\W\b\B\s\S取决于当前区域设定
(?iLmsux) :不同模式 一般放在表达式的开头,其他位置也行
pattern
match
serach
split
findall
finditer
sub
?match和search的区别
re使用流程:模式串->表达式对象->匹配目标文本
常用元字符:
. :除换行符以外的任何字符\ :转义字符 当我们把元字符当做普通字符去匹配的时候
[] :字符集合匹配
\d :数字匹配 0-9
\D :非数字的匹配[^0-9]
\s :非空白字符[ \t\r\n\f\n]
\S :f非空白字符[^\s]
\w :字母数字[A-Za-z0-9]
\W :非字母数字[^\w]
#说白了,大写和小写的正好是补集的关系
#使用compile会快一点
>>> p = re.compile(r'nihao')
>>> type(p)
<type '_sre.SRE_Pattern'>
#匹配字符前面加r,少一些不必要的麻烦
In [10]: rs = p.match('abc abcde abcdd')
#使用mathch方法,匹配成功返回一个mactch对象,没有成功就返回None
In [11]: print rs
<_sre.SRE_Match object at 0x03638918>
In [12]: rs.group() #mathc只返回一个匹配到的字符
Out[12]: 'abc'
数量匹配:
+ :一次或者多次?:一次或者0次
* :任意次数,0次,1次,多次
{m} :匹配前一个字符m次
{m,n}: 匹配前一个字符m到n次
数量词?:非贪婪模式 ex:[i]*?
In [14]: p = re.compile('[abc]{2,3}') #默认是贪婪模式,总是匹配到最大限度
In [15]: p.findall('abcabcbc')
Out[15]: ['abc', 'abc', 'bc']
In [16]: p = re.compile('[abc]{2,3}?') #加了?以后变成非贪婪,最小匹配就返回
In [17]: p.findall('abcabcbc')
Out[17]: ['ab', 'ca', 'bc', 'bc']
边界:
^ :匹配字符串的开头,多行就匹配每一行的开头$ :匹配字符串的结尾,多行就匹配每一行的结尾
\A :仅匹配字符串的开头
\Z :仅匹配字符串的末尾
\b :匹配 \w \W之间
逻辑分组:
| :或操作(..) :分组匹配,匹配返回值
(?...):分组匹配,不返回匹配值
\<num> :引用到编号为num的分组匹配到的串
(?P<name>):分组命名
(?p=name): 引用分组,不提取值
#分组操作和group字样的方法关系密切
#不分组不提取
In [52]: re.findall(r'(?:a)b','abc')
Out[52]: ['ab']
#分组命名
In [54]: m = re.match(r'(?P<a>a)(b)','abc')
In [55]: m.groups()
Out[55]: ('a', 'b')
In [56]: m.groupdict()
Out[56]: {'a': 'a'}
特殊构造:
(?:..) :不分组(?iLmsux) :不同模式
(?#...) :#注释
(?=...) :之后满足才返回字符
(?!...) :
(?<=...) :
(?<!...) :
(?(id/name)yes|no) :
In [69]: re.findall(r'a(?=\d)','a3 a4')
Out[69]: ['a', 'a']
匹配模式:
re.I 忽略大小写re.M 多行模式改变为^ $的行为,忽略换行
re.S .任意匹配模式,包括换行
re.U 使用\w\W\b\B\s\S\d\D取决于UNIcode字符属性
re.X 详细模式
re.L 使用预订字符串类\w\W\b\B\s\S取决于当前区域设定
(?iLmsux) :不同模式 一般放在表达式的开头,其他位置也行
常用函数:
compilepattern
match
serach
split
findall
finditer
sub
?match和search的区别
相关文章推荐
- Python学习笔记6-Python中re(正则表达式)模块学习
- python 正则表达式 学习笔记(不断补充ing)
- Python笔记(8)re模块,正则表达式
- Python学习笔记(四):面向对象、正则表达式(快速入门篇)
- [python自学笔记]正则表达式和爬虫案例
- python学习笔记(一)——关于正则表达式的学习小结
- Python学习笔记8:标准库之正则表达式
- 学习笔记23-Python正则表达式
- 鱼c笔记——Python正则表达式(一):匹配IP地址
- Python3 高级功能学习笔记(面向对象和正则表达式)
- python学习笔记(五)文件操作、正则表达式
- python正则表达式学习 笔记
- python 学习笔记(5)用户自定义类正则表达式
- 【Python】学习笔记——-12、正则表达式
- Python 正则表达式 re 模块简明笔记
- 【转】【Python学习笔记】正则表达式
- Python学习笔记 ——正则表达式初识
- Python 学习笔记 正则表达式
- Python学习笔记--正则表达式,re模块
- Python学习笔记5(字符串与正则表达式)