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

[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.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) :不同模式 一般放在表达式的开头,其他位置也行

        

        常用函数:

            compile

            pattern

            match

            serach

            split

            findall

            finditer

            sub

            ?match和search的区别      

         

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息