python reRegex模組(Regular Expression)_python

來源:互聯網
上載者:User

模組的的作用主要是用於字串和文本處理,尋找,搜尋,替換等

複習一下基本的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()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.