模組的的作用主要是用於字串和文本處理,尋找,搜尋,替換等
複習一下基本的Regex吧
.:匹配除了分行符號以為的任意單個字元
*:匹配任一字元,一個,零個,多個都能匹配得到 俗稱貪婪模式
+:匹配位於+之前的一個或者多個字元
|:匹配位於|之前或者之後的字元
^:匹配行首
$:匹配行尾
?:匹配位於?之前的零個或者一個字元,不匹配多個字元
\:表示 \ 之後的為逸出字元
[]:匹配[]之中的任意單個字元,[0-9]表示匹配0到9任意一個數字
():將位於()之內的的內容當作一個整體
{}:按{}中的次數進行匹配,100[0-9]{3}表示在100之後任意匹配一個3位元(100-999)
python中以\開頭的元字元:
特殊序列符號
|
意義 |
\A
|
只在字串開始進行匹配 |
\Z
|
只在字串結尾進行匹配 |
\b
|
匹配位於開始或結尾的Null 字元串 |
\B
|
匹配不位於開始或結尾的Null 字元串 |
\d
|
相當於[0-9] |
\D
|
相當於[^0-9] |
\s
|
匹配任意空白字元:[\t\n\r\r\v] |
\S
|
匹配任意非空白字元:[^\t\n\r\r\v] |
\w
|
匹配任一數字和字母:[a-zA-Z0-9] |
\W
|
匹配任意非數字和字母:[^a-zA-Z0-9] |
Regex文法表
| 文法 |
意義 |
說明 |
| "." |
任一字元 |
|
| "^" |
字串開始 |
'^hello'匹配'helloworld'而不匹配'aaaahellobbb' |
| "$" |
字串結尾 |
與上同理 |
"*"
|
0 個或多個字元(貪婪匹配)
|
<*>匹配<title>chinaunix</title> |
"+"
|
1 個或多個字元(貪婪匹配)
|
與上同理
|
"?"
|
0 個或多個字元(貪婪匹配)
|
與上同理
|
*?,+?,??
|
以上三個取第一個匹配結果(非貪婪匹配) |
<*>匹配<title>
|
{m,n}
|
對於前一個字元重複m到n次,{m}亦可
|
a{6}匹配6個a、a{2,4}匹配2到4個a |
{m,n}?
|
對於前一個字元重複m到n次,並取儘可能少
|
‘aaaaaa'中a{2,4}只會匹配2個 |
"\\"
|
特殊字元轉義或者特殊序列 |
|
[]
|
表示一個字元集 |
[0-9]、[a-z]、[A-Z]、[^0] |
"|"
|
或 |
A|B,或運算 |
(...)
|
匹配括弧中任意運算式 |
|
(?#...)
|
注釋,可忽略 |
|
(?=...)
|
Matches if ... matches next, but doesn't consume the string.
|
'(?=test)' 在hellotest中匹配hello |
(?!...)
|
Matches if ... doesn't match next.
|
'(?!=test)' 若hello後面不為test,匹配hello
|
(?<=...)
|
Matches if preceded by ... (must be fixed length).
|
'(?<=hello)test' 在hellotest中匹配test
|
(?<!...)
|
Matches if not preceded by ... (must be fixed length).
|
'(?<!hello)test' 在hellotest中不匹配test
|
匹配的標誌和含義
| 標誌 |
含義 |
| re.I |
忽略大小寫 |
| re.L |
根據本地設定而更改\w,\W,\b,\B,\s,\S的匹配內容 |
| re.M |
多行匹配模式 |
| re.S |
使“.”元字元匹配分行符號 |
| re.U |
匹配Unicode字元 |
| re.X |
忽略需要匹配模式中的空格,並且可以使用"#"號注釋 |
常值內容(提取Linux下的password檔案)
man:x:6:12:man:/var/cache/man:/bin/nologin
re模組中有3個搜尋函數,每個函數都接受3個參數(匹配模式,要匹配的字串,進行匹配的標誌),如果匹配到了就返回一個對象執行個體,麼有就返會None.
findall():用於在字串中尋找符合Regex的字串,並返回這些字串的列表
search():搜尋整個字串,返回對象執行個體
match():只從第一個字元開始匹配,後面的不再匹配,返回對象執行個體
lovelinux@LoveLinux:~/py/boke$ cat text man:x:6:12:man:/var/cache/man:/bin/shlovelinux@LoveLinux:~/py/boke$ cat test.py#/usr/bin/env python#coding:utf-8import rewith open('text','r') as txt: f = txt.read() print re.match('bin',f) print re.search('bin',f).end() lovelinux@LoveLinux:~/py/boke$ python test.py None34lovelinux@LoveLinux:~/py/boke$ vim test.pylovelinux@LoveLinux:~/py/boke$ python test.py None<_sre.SRE_Match object at 0x7f12fc9f9ed0>
返回是對象執行個體有2個方法,
start():返回記錄匹配到字元的開始索引
end():返回記錄匹配到字元的結束索引
lovelinux@LoveLinux:~/py/boke$ python test.py None3134lovelinux@LoveLinux:~/py/boke$ cat test.py #/usr/bin/env python#coding:utf-8import rewith open('text','r') as txt: f = txt.read() print re.match('bin',f) print re.search('bin',f).start() print re.search('bin',f).end()