Python标准库01 正则表达式(re包)
python正則表達式基礎
簡單介紹
正則表達式并不是python的一部分。正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強大。在提供正則表達式的語言里,正則表達式的語法是一樣的,區別只在于不同的貶稱語言實現支持的語法數量不同;但不用擔心,不被支持的語法通常是不常用的的部分。
正則表達式進行匹配的流程
正則表達式引擎“編譯”<正則表達式>得到正則表達式對象(正則表達式引擎編譯表達式字符串得到的對象,包含應如何進行匹配的信息),正則表達式對象需要匹配的文本進行"匹配",生成匹配結果(正則表達式對象對文本進行匹配后得到的結果,包含了這次成功匹配的信息,如匹配到的字符串、分組以及在文本中的索引)。
匹配大概過程
正則表達式的大致匹配過程是:一次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。如果表達式中有量詞或邊界,這個過程會稍微有些不同,但也是很好理解的,多看實例多使用幾次就能明白。
python支持的正則表達式元字符和語法
語法 說明 表達實例 完整匹配的字符串 一般字符 匹配自身 abc abc . 匹配任意一個字符(除"\n"外) a.c abc \ 轉義字符, 使后一個字符改變原來的意思 a\.c a.c [...] 字符集(字符類)對應位置可以是字符集中任意一個字符 a[bcd]e abe ace ade a|b 字符a或字符b <-等價于-> [ab] [0-9] 數字0-9其中一個字符 [a-z] 小寫字母a-z其中一個字符 [A-Z] 大寫字母A-Z其中一個字符 [^m] 不是字符m --------------------------------------------------------------------------------------------------- \d 數字:[0-9] a\dc a1c \D 非數字:[^\d] a\Dc abc \s 空白字符:[<空格>\t\r\n\f\v] a\sc a c \S 非空白字符:[^\s] a\Sc abc \w 單詞字符:[A-Za-z0-9] a\wc abc \W 非單詞字符:[^\w] a\Wc a c -------------------------數量詞(重復)------------------------------------------------------ * 匹配前一個字符0次或無限次(>=0) abc* ab abc abcc abccc ... + 匹配前一個字符1次或無限次(>=1) abc+ abc abcc abccc ... ? 匹配前一個字符0次或1次 abc? ab abc {m} 匹配前一個字符m次 ab{2}c abbc {m,n} 匹配前一個字符m至n次(m<= >=n); m和n可以省略 ab{1,2}c abc abbc *? +? ?? {m,n}? 使* + ? {m,n}變成非貪婪模式 ------------------------------邊界匹配------------------------------------------------------ ^ 匹配字符串開頭(在多行模式中匹配每一行的開頭) $ 匹配字符串末尾(在多行模式中匹配每一行的末尾) \A 僅匹配字符串開頭 這幾種匹配模式有點疑惑?????? \Z 僅匹配字符串末尾 \b 匹配\w和\W之間 \B [^\b] ------------------------------邏輯、分組------------------------------------------------------ | |代表左右表達式任意匹配一個(類似短路或,先匹配左邊) abc|def abc def (...) 被括起來的表達式將作為分組, 從表達式左邊開始每遇到 (abc){2} abcabc 一個分組的左括號'(',編號+1;分組表達式作為一個整體, a(123|456)c a123c a456c 可以后接數量詞.表達式中的|僅在該組中有效 (?P<name>...)分組, 除了原有的編號外再指定一個額外的別名 (?P<id>abc){2} abcabc \<number> 引用編號為<number>的分組匹配到的字符串 (\d)abc\1 1abc1 5abc5 (?P=name) 引用別名為<name>的分組匹配到的字符串 (?P<id>\d)abc(?P=id) 1abc1 5abc5 ------------------------------特殊構造(不作為分組)--------------------------------------------------- (?:...) (...)的不分組版本, 用于使用'|'或后接數量詞 (?:abc){2} abcabc (?iLmsux) iLmsux的每個字符代表一個匹配模式, 只能用在正則的開頭(?i)abc Abc (?#...) #后的內容作為注釋被忽略 abc(?#comment)123 abc123 (?=...) 之后的字符串內容需要匹配表達式才能成功匹配,不消耗字符串內容 a(?=\d) 后面是數字的a (?!...) 之后的字符串內容需要不匹配表達式才能成功匹配,不消耗字符串內容a(?!\d) 后面不是數字的a (?<=...) 之前的字符串內容需要匹配表達式才能成功匹配,不消耗字符串內容(?<=\d)a 前面不是數字的a (?<!...) 之前的字符串內容需要不匹配表達式才能成功匹配,不消耗字符串內容(?<!\d)a 前面不是數字的a?
?
?
參考:
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
http://www.runoob.com/python/python-reg-expressions.html
http://www.cnblogs.com/PythonHome/archive/2011/11/19/2255459.html
http://www.cnblogs.com/kaituorensheng/p/3489492.html
轉載于:https://www.cnblogs.com/liwei0526vip/p/5096510.html
總結
以上是生活随笔為你收集整理的Python标准库01 正则表达式(re包)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DWZ+Uploadify +JSON
- 下一篇: 2015年12月书单推荐