2012年9月23日 星期日

python re 正則表達式 模組

re模組
限定符說明:
".": 匹配任何字符
"^": 匹配開頭
"$": 匹配結尾
"*": 匹配0次或更多次之前的表達式。貪婪時,匹配盡可能多次
"+": 匹配1次或更多次之前的表達式。等價於{1,}
"?": 匹配0次或1次之前的表達式。等價於{0,1}
"*?,+?,??": 非貪婪匹配
"{m,n}": 貪婪式匹配之前的表達式m到n次
"{m,n}?": 非貪婪匹配之前的表達式m到n次
"\": 將下一個字符轉義
[ABC]: 指定一個字符集
[^ABC]: 指定一個不在範圍內的字符集
"A|B": 匹配條件A或條件B
(pattern): 匹配括號內的表達式,並作為匹配項
(?:pattern): 匹配括號內的表達式,但不作為匹配項
(?#...): 註釋,忽略
(?=pattern): 預查,若之後的內容匹配表達式,則成立
(?!pattern): 預查,若之後的內容不匹配表達式,則成立
(?Ppattern): 給一個匹配項命名
(?P=name): 匹配與之前命名的匹配項內容相同的部分
如:s='12a34a56'
   re.findall('12(?P.).*(?P=xxx)56)', s)
   (?P.)匹配到a,則(?P=xxx)的內容也必須為a時才pp
(?iLmsux): 設置I,L,M,S,U,or X標記
轉義符說明:
\A: 匹配開頭
\Z: 匹配結尾
\b: 匹配開頭或結尾的空字符串,通常是指單詞邊界 ???
\B: 匹配非開頭和結尾的空字符串,通常是指非單詞邊界???
\d: 匹配一個數字。等價於[0-9]
\D: 匹配一個非數字。等價於[^0-9]
\s: 匹配一個空白字符。等價於[ \t\n\r\f\v]
\S: 匹配一個非空白字符。等價於[^ \t\n\r\f\v]
\w: 匹配一個字母數字字符。等價於[a-zA-Z0-9_]
\W: 匹配一個非字母數字字符。等價於[^a-zA-Z0-9_]
\\: 匹配一個反斜杠
\f: 匹配一個換頁符。等價於\x0C 和 \cL
\n: 匹配一個換行符。等價於\x0A 和 \cJ
\r: 匹配一個回車符。等價於\x0D 和 \cM
\t: 匹配一個制表符。等價於\x09 和 \cI
\v: 匹配一個垂直制表符。等價於\x0B 和 \cK
\xHH: 匹配 HH,其中 HH 為十六進制轉義值
\uHHHH: 匹配 HHHH,其中 HHHH 是一個用四個十六進制數字表示的Unicode字符
常用匹配:
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*\\? \\S*)?$
匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$
模塊使用:
    match:
    search:
    sub: 替換
    subn: 替換並返回替換的次數
    split: 分隔
    findall: 查找所有匹配項
    compile:
    purge:
    escape:
可選參數:
    I(IGNORECASE): 忽略大小寫
    L(LOCALE): 使用\w,\W,\b,\B時依據本地配置???
    M(MULTILINE): 多行,"^"匹配每行的開頭,"$"匹配每行的末尾
    S(DOTALL): 使"."匹配包含換行符在內的任意字符
    X(VERBOSE): 忽略空白處和註釋內容
    U(UNICODE): 使\w,\W,\b,\B依靠UNICODE編碼

沒有留言:

張貼留言