正則表達式可以包含一些可選標志修飾符來控制匹配的模式。修飾符被指定為一個可選的標志。多個標志可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設置成 I 和 M 標志:
| 修飾符 | 描述 |
|---|---|
| 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”。看如下代碼:
|
1
2
3
4
5
6
7
8
|
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
|
|
1
2
3
|
運行結果:
b
is
[]
c
is
[
'pass:\n\t123\n\t'
]
|
正則表達式中,“.”的作用是匹配除“\n”以外的任何字符,也就是說,它是在一行中進行匹配。這里的“行”是以“\n”進行區分的。a字符串有每行的末尾有一個“\n”,不過它不可見。
如果不使用re.S參數,則只在每一行內進行匹配,如果一行沒有,就換下一行重新開始,不會跨行。而使用re.S參數以后,正則表達式會將這個字符串作為一個整體,將“\n”當做一個普通的字符加入到這個字符串中,在整體中進行匹配。
re.I
不區分大小寫
|
1
2
3
4
5
|
res
=
re.findall(r
"A"
,
"abc"
, re.I)
print
(res)
運行結果:[
'a'
]
|
re.M
將所有行的尾字母輸出
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>> 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
|
1
2
3
4
|
# 要求結果:['12', '23', '34']
l
=
[
'1 2 '
,
'2 3'
,
' 3 4'
]
import
re
print
(
eval
(re.sub(r
'\s*'
, '',
str
(l))))
|
