python3+ 模塊學習 之 re


re 模塊

參考:Python3 如何優雅地使用正則表達式(詳解系列)  

   Python3 正則表達式特殊符號及用法(詳細列表)    (出處: 魚C論壇)

正則表達式

常用元字符:
. ^ $ * + ?  {  } [  ] \ | (  )         

* 表示匹配0次或多次
+ 表示匹配1次或多次
? 表示匹配0次或1次
{m,n} 表示匹配m到n次(前四個加'?'實現非貪婪匹配)
| 表示或操作
^ 匹配字符串的起始位置
$ 匹配字符串的結束位置

 

 

 

 

 

 

\(元字符)    ---去除元字符的特殊功能,表示匹配正常字符

\(普通字符)    ----實現特殊功能

         (普通字符小寫,表示肯定,普通字符大寫,表示非    e.g. \d相當於[0-9]   \D相當於[^0-9])

\d 相當於[0-9]
\s 匹配任何空白字符,相當於[\t\n\r\f\v]
\w 匹配任何單詞字符
\b 匹配單詞的開始或結束,表示單詞邊界
\Z 只匹配字符串的結束位置

python字符串與正則表示字符串有沖突,如\b(python字符串表示ASCII碼8制表符,而正則表達式則表示匹配單詞的開始或結束),在python中書寫正則表示式時,要使用python的原始字符串,即添加'r'前綴。 

Python 中正則表達式的擴展語法('...'表示正常的正則表達式):

  (?:...)      表示非捕獲組,非捕獲組不會影響其他組的序號

  (?P<name>...)  表示命名組,反向引用(?P=name)

  前向斷言(零寬,即斷言不會被匹配到結果字符串中,也不會消耗字符串):即斷言在此位置的后面匹配的是...的內容(在斷言字符串的前面,故稱前向斷言)

    (?=...)    表示肯定,匹配成功表示成功,否則失敗。

    (?!...)    表示否定, 匹配失敗表示成功,否則失敗

      e.g.  .*[.](?!bat$).*$  匹配文件擴展名不為'bat'的文件

  后向斷言(零寬,即斷言不會被匹配到結果字符串中,也不會消耗字符串):即斷言在此位置的前面匹配的是...的內容(在斷言字符串的后面,故稱后向斷言)

    (?<=...)   表示肯定,匹配成功表示成功,否則失敗。

    (?<!...)   表示否定, 匹配失敗表示成功,否則失敗

  條件匹配:  

    (?(id/name)Y|N)       ,如果id 或者name匹配,則匹配'Y',否則,匹配'N'

  字符串替換的引用:

    \g序號  或  \g<序號>    推薦用第二種方法,防止歧義

    \g<name>         用命名組的方式引用

      

python中使用正則表達式:(re module)

1.調用全局函數:

match(), search(), findall()

參數:(正則表達式, 匹配字符串[,匹配標志])

ASCII, A 使得轉義符號如\w, \b, \s, \d只能匹配ASCII字符
DOTALL, S 使得. 匹配任何符號,包括換行符
IGNORECASE, I 匹配不區分大小寫
LOCALE, L 支持當前的語言設置
MULTILINE, M   多行匹配
VERBOSE, X 啟用詳細的正則表達式(增加正則表達式的可讀性,匹配時忽略' '和'\n' )

 

 

 

 

 

 

2.創建模式對象:

p = re.compile(正則表達式[,匹配標志])

然后調用對象的方法。

詳見python標准文檔。

python全局函數和對象方法中返回的match對象,設為m:

m.group(0)    查看整個正則表達式的匹配字符串

m.group(1)    查看第一個分組的匹配結果(分組在python中用小括號表示),其他分組依此類推

m.group('name')     同上,用分組的名字索引

m.groups()             返回所有分組的匹配結果,用元組表示

m.groupdict()    同上,用字典表示

m.start([group])      返回匹配的起始位置

m.end([group])    返回匹配的終止位置

m.span()     查看匹配的首尾位置的元組

詳見python標准文檔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM