1. 程式人生 > >python - re模塊(正則表達式)

python - re模塊(正則表達式)

ima mage 習題 dht 模式 spl 替換 分享 對象

元字符介紹:

.     單個字符匹配

^    以字符開頭匹配 在[]裏面作為非

$    以字符結尾匹配

A|B   匹配A或者B的字符串

註意 : |

>>> re.findall(r"\d+@(?:qq|163).com","[email protected]@qq.combfew")
[[email protected], [email protected]]

*    (0,無窮多)重復匹配符號前字符

+    (1,無窮多)重復匹配符號前字符

?    (0,1)重復匹配符號前字符

*和+區別:

>>> re.findall("
aaf*","dwaadhtfhdw") [aa] >>> re.findall("aaf+","dwaadhtfhdw") []

{}    重復萬金油

{0,}等同於 *

{1,}等同於+

{0,1}等同於?

{3}重復3次


[]    匹配大括號內的字符

[a]    匹配大廓內的字符一次

[a-z]   匹配a-z中任意字符一次

[0-9]   匹配0-9中任意字符一次   

[^a-z]   非字符a-z一次

>>> re.findall("\([^()]*\)",‘2*(3+(2*4-(9+4)))‘)       
[(9+4)
] >>> #找到最內層的括號

分組

()        將數據分組匹配

(?P<name>)    命名分組

技術分享圖片

#在運行分組的時候千萬要註意!!!!!!!!!!!!!
>>> re.findall("(abc)","abcabcabc") [abc, abc, abc] >>> re.findall("(abc)+","abcabcabc") [abc] >>> re.findall("(?:abc)","abcabcabc") [abc, abc, abc] >>> re.findall("
(?:abc)+","abcabcabc") [abcabcabc] >>>

#應用分組後,匹配規則優先反饋分組內的數據.

應用:

re.search().group(name)  

>>> re.search(r"(?P<zjm>主機名)(?P<id>\w{2}\d+)","主機名PC201808110908n7旗艦版").group("zjm")
主機名
>>> re.search(r"(?P<zjm>主機名)(?P<id>\w{2}\d+)","主機名PC201808110908n7旗艦版").group("id")
PC201808110908
>>> 

特殊符號:

\d   匹配數字,[0-9]

\D  匹配任何非數據[^0-9]

\s   匹配任何空白字符,[\t\n\r\f\v]

\S  匹配任何非空白字符,[^\t\n\r\f\v]

\w  匹配任何字母數字,[a-zA-Z0-9]

\W  匹配任何非字符數字[^a-zA-Z0-9]

\b  匹配一個reshuffle字符邊界,空格,&,#等


re 方法:

import re #導入模塊

re.findall()    找到匹配數據,返回一個 列表類型

re.match()    找到匹配數據,返回一個對象(包含匹配字符位置以及字符) 可以group取出數據

re.split()     找到匹配數據,已找到數據分割

re.sub()     參數:re.sub("匹配規則","替換規則",字符串,替換次數)

compile方法

obj = re.compile

obj.re方法(字符串)

>>> obj = re.compile("\d")
>>> obj.findall("123dasda323432")
[1, 2, 3, 3, 2, 3, 4, 3, 2]
>>> 

re.finditer()    將匹配到的數據轉換成生成器. .__next__.group()獲取數據.


練習題:

郵箱地址匹配:

import re
#從中找到4條郵箱地址:
#識別模式:數字+@+qq|163|135.com
msg = "sdfefsefEGDFSBD234T37YCUN32JF6SC5621RKI9JSF455342229@[email protected]@[email protected]"

#以列表形式返回:
email = re.findall("(\d+@(?:163|qq|135).com)",msg)
print(email)

#以單條數據返回
email2 = re.finditer("(\d+@(?:163|qq|135).com)",msg)
print(next(email2).group())
print(next(email2).group())
print(next(email2).group())
print(next(email2).group())

python - re模塊(正則表達式)