首页 > 代码库 > 正则表达式整理

正则表达式整理

元字符:
     .            除换行符的任意字符
     \            转义字符
     [...]        字符集合
     \d           数字:[0-9]
     \D           非数字[0-9]
     \s            空白字符 [<空格>\t\r\n\f]
     \S           非空白字符[^\s]
     \w           单词字符[A-Za-z0-9_]
     \W          非单词字符[^\w]
 
数量词:
     *               匹配一个字符0或多次
     +               匹配前一个字符1次或多次
     ?               匹配前一个字符0次或1次
     {m}           匹配前一个字符m次
                      {0,}等同于*     {1,}等同于+     {0,1}等同于?
     {m,n}        匹配前一个字符m至n次
 
边界符:
     ^               匹配字符串开头,多行匹配每一行开头
     $                匹配字符串末尾,多行匹配每一行末尾
     \A               仅匹配字符串开头
     \Z               仅匹配字符串末尾
     \b               匹配\w和\W之间
 
     (^ 放在字符集合外:表示匹配字符串开头
            放在字符集合里:表示非)
 
 
逻辑、分组:
     |                          左右表达式任意匹配一个
                                先匹配左边一旦成功则跳过匹配右边
                                如果|没有包含在()中,匹配整个正则表达式
     (...)                      分组匹配,从左到右,每遇到一个编号+1,分组后可加数量词
     (?P<name>...)      除了分组序号外,指定一个name的别名
     \<number>          引用编号为<number>的分组匹配到的字符串
     (?P=name)           引用别名为<name>的分组匹配到的串
 
 
方法、函数:
     match()               决定RE是否在字符串刚开始的位置匹配
     search()              扫描字符串,找到这个RE匹配的位置
     findall()               找到RE匹配的所有子串,并把它们作为一个列表返回
     finditer()              找到RE匹配的所有子串,并把它们作为一个迭代器返回
 
                               如果没有匹配到,match()和search()将返回None,否则返回MatchObject实例
 
MatchObject实例方法:
     group()               返回被RE匹配的字符串
     start()                 返回匹配开始的位置
     end()                  返回匹配结束的位置
     span()                 返回一个元组包含匹配(开始,结束)的位置
 
 
                    p = re.compile(...)
                    m = p.match(‘stirng goes here‘)
                    if m:
                         print ‘Match found:‘,m.group()
                    else:
                         print ‘No match‘
 
模块级函数:
     match()
     search()
     sub()                    re.sub(正则表达式string,要替换的string,原始字符串)
     subn()                  和sub用法一样,会同时返回替换的次数
     split()                   re.split(正则表达式,原始字符串string)
     findall()
 
 
re属性(编译标志flag):
     DOTALL,S               使.匹配包括换行在内的所有字符
     IGNORECASE,I         使匹配对大小写不敏感
     LOCAL,L                  使本地化识别(locale-aware)匹配(法语等)
     MULTILINE,M           多行匹配,影响^和$
     VERBOSE,X             能够使用REs的verbose状态,使之被组织得更清晰易懂

分组:
     (...)
     (...|...)
 
     当有分组时,findall返回的结果会优先返回分组(括号中)中的数据