Python正則表達式中的re.S,re.M,re.I的做用

正則表達式能夠包含一些可選標誌修飾符來控制匹配的模式。修飾符被指定爲一個可選的標誌。多個標誌能夠經過按位 OR(|) 它們來指定。如 re.I | re.M 被設置成 I 和 M 標誌:python

修飾符 描述
re.I 使匹配對大小寫不敏感
re.L 作本地化識別(locale-aware)匹配
re.M 多行匹配,影響 ^ 和 $
re.S 使 . 匹配包括換行在內的全部字符
re.U 根據Unicode字符集解析字符。這個標誌影響 \w, \W, \b, \B.
re.X 該標誌經過給予你更靈活的格式以便你將正則表達式寫得更易於理解。

re.S

在Python的正則表達式中,有一個參數爲re.S。它表示 「.」 的做用擴展到整個字符串,包括「\n」。看以下代碼:正則表達式

import re
a = '''asdfhellopass:
    worldaf
    '''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c

  

運行結果:
b is  []
c is  ['pass:\n\t123\n\t']

  正則表達式中,「.」的做用是匹配除「\n」之外的任何字符,也就是說,它是在一行中進行匹配。這裏的「行」是以「\n」進行區分的。a字符串有每行的末尾有一個「\n」,不過它不可見。code

若是不使用re.S參數,則只在每一行內進行匹配,若是一行沒有,就換下一行從新開始,不會跨行。而使用re.S參數之後,正則表達式會將這個字符串做爲一個總體,將「\n」當作一個普通的字符加入到這個字符串中,在總體中進行匹配。blog

re.I

  不區分大小寫字符串

res = re.findall(r"A", "abc", re.I)
print(res)


運行結果:['a']

re.M

  將全部行的尾字母輸出table

>>> s= '12 34/n56 78/n90'

>>> re.findall( r'^/d+' , s , re.M )          # 匹配位於行首的數字

['12', '56', '90']

>>> re.findall( r’/A/d+’, s , re.M )        # 匹配位於字符串開頭的數字

['12']

>>> re.findall( r'/d+$' , s , re.M )          # 匹配位於行尾的數字

['34', '78', '90']

>>> re.findall( r’/d+/Z’ , s , re.M )        # 匹配位於字符串尾的數字

['90']

  

re.sub

# 要求結果:['12', '23', '34']
l = ['1 2 ', '2   3', '  3 4']
import re
print(eval(re.sub(r'\s*', '', str(l))))
相關文章
相關標籤/搜索