創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

怎么使用Python re正則表達式模塊?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
正則表達式(Regular Expression)用于描述一種字符串匹配的模式,它可用于檢查一個字符串是否含有某個子串,也可用于從字符串中提取匹配的子串,或者對字符串中匹配的子串執(zhí)行替換操作。
很多讀者都會覺得正則表達式是非常神奇、高級的知識,實際上正則表達式確實是一種非常實用的工具。正則表達式的入門并不難,任意字符串都可以被當成正則表達式來使用,例如“abc”,它也是一個正則表達式,只是它只能匹配“abc”字符串。
當然,如果正則表達式僅能匹配“abc”這樣的字符串,那么正則表達式也就不值得學習了。事實上,正則表達式包含的知識點比較多,它的模式匹配能力也非常強,初學者可以由淺入深地學習。
對于 Python 開發(fā)者來說,掌握正則表達式確實是一個很重要的技能。在掌握了正則表達式之后,Python 開發(fā)者也可使用正則表達式來開發(fā)數(shù)據(jù)抓取、網(wǎng)絡爬蟲等程序。
實際上,掌握 Python 的正則表達式并不難,無非就是幾個簡單的函數(shù)。在 Python 的交互式解釋器中先導入 re 模塊,然后輸入 re.__all__ 命令,即可看到該模塊所包含的全部屬性和函數(shù):
>>> re.__all__ ['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 'escape', 'error', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE']
從上面的輸出結果可以看出,re 模塊包含了為數(shù)不多的幾個函數(shù)和屬性(用于控制正則表達式匹配的幾個選項)。下面先介紹這些函數(shù)的作用:
re.compile(pattern, flags=0):該函數(shù)用于將正則表達式字符串編譯成 _sre.SRE_Pattern 對象,該對象代表了正則表達式編譯之后在內存中的對象,它可以緩存并復用正則表達式字符串。如果程序需要多次使用同一個正則表達式字符串,則可考慮先編譯它。
該函數(shù)的 pattern 參數(shù)就是它所編譯的正則表達式字符串,flags 則代表了正則表達式的匹配旗標。編譯得到的 _sre.SRE_Pattern 對象包含了 re 模塊中絕大部分函數(shù)對應的方法。比如下面兩行代碼表示先編譯正則表達式,然后調用正則表達式的 search() 方法執(zhí)行匹配:
#先編譯正則表達式
p = re.compile('abc')
#調用_sre.SRE_Pattern 對象的search()方法
p.search("www.abc.com")上面兩行代碼和下面代碼的效果基本相同:
#直接用正則表達式匹配目標字符串
re.search('abc','www.abc.com')對于上面兩種方式,由于第一種方式預編譯了正則表達式,因此程序可復用 p 對象(該對象緩存了正則表達式字符串),所以具有更好的性能。re.match(pattern, string, flags=0):嘗試從字符串的開始位置來匹配正則表達式,如果從開始位置匹配不成功,match() 函數(shù)就返回 None 。其中 pattern 參數(shù)代表正則表達式;string 代表被匹配的字符串;flags 則代表正則表達式的匹配旗標。該函數(shù)返回 _sre.SRE_Match 對象,該對象包含的 span(n) 方法用于獲取第 n+1 個組的匹配位置,group(n) 方法用于獲取第 n+1 個組所匹配的子串。re.search(pattern, string, flags=0):掃描整個字符串,并返回字符串中第一處匹配 pattern 的匹配對象。其中 pattern 參數(shù)代表正則表達式;string 代表被匹配的字符串;flags 則代表正則表達式的匹配旗標。該函數(shù)也返回 _sre.SRE_Match 對象。
根據(jù)上面介紹不難發(fā)現(xiàn),match() 與 search() 的區(qū)別在于,match() 必須從字符串開始處就匹配,但 search() 可以搜索整個字符串。例如如下程序:
import re
m1 = re.match('www', 'www.fkit.org')# 開始位置可以匹配
print(m1.span()) # span返回匹配的位置
print(m1.group()) # group返回匹配的組
print(re.match('fkit', 'www.fkit.com')) # 開始位置匹配不到,返回None
m2 = re.search('www', 'www.fkit.org') # 開始位置可以匹配
print(m2.span())
print(m2.group())
m3 = re.search('fkit', 'www.fkit.com') # 中間位置可以匹配,返回Match對象
print(m3.span())
print(m3.group())運行上面程序,可以看到如下輸出結果:
(0, 3) www None (0, 3) www (4, 8) fkit
從上面的輸出結果可以看出,match() 函數(shù)要求必須從字符串開始處匹配,而 search() 函數(shù)則可掃描整個字符串,從中間任意位置開始匹配。re.findall(pattern, string, flags=0):掃描整個字符串,并返回字符串中所有匹配 pattern 的子串組成的列表。其中 pattern 參數(shù)代表正則表達式;string 代表被匹配的宇符串;flags 則代表正則表達式的匹配旗標。re.finditer(pattern, string, flags=0):掃描整個字符串,并返回字符串中所有匹配 pattern 的子串組成的迭代器,迭代器的元素是 _sre.SRE_Match 對象。其中 pattern 參數(shù)代表正則表達式;string 代表被匹配的字符串;flags 則代表正則表達式的匹配旗標。
從上面介紹不難看出,findall() 與 finditer() 函數(shù)的功能基本相似,區(qū)別在于它們的返回值不同,findall() 函數(shù)返回所有匹配 patten 的子串組成的列表;而 finditer() 函數(shù)則返回所有匹配 pattern 的子串組成的選代器。
如果對比 findall()、finditer() 和 search() 函數(shù),它們的區(qū)別也很明顯,search() 只返回字符串中第一處匹配 pattern 的子串;而 findall() 和 finditer() 則返回字符串中所有匹配 pattern 的子串。
import re
# 返回所有匹配pattern的子串組成的列表, 忽略大小寫
print(re.findall('fkit', 'FkIt is very good , Fkit.org is my favorite' , re.I))
# 返回所有匹配pattern的子串組成的迭代器, 忽略大小寫
it = re.finditer('fkit', 'FkIt is very good , Fkit.org is my favorite' , re.I)
for e in it:
print(str(e.start()) + "-->" + e.group())re.fullmatch(pattem, string, flags=0):該函數(shù)要求整個字符串能匹配 pattern,如果匹配則返回包含匹配信息的 _sre.SRE_Match 對象;否則返回 None。re.sub(pattern, repl, string, count=0, flags=0):該函數(shù)用于將 string 字符串中所有匹配 pattern 的內容替換成 repl;repl 既可是被替換的字符串,也可是一個函數(shù)。count 參數(shù)控制最多替換多少次,如果指定 count 為 0 ,則表示全部首換。如下程序示范了 sub() 函數(shù)的簡單用法:
import re my_date = '2008-08-18' # 將my_date字符串里中畫線替換成斜線 print(re.sub(r'-', '/' , my_date)) # 將my_date字符串里中畫線替換成斜線,只替換一次 print(re.sub(r'-', '/' , my_date, 1))
運行上面程序,可以看到如下輸出結果:
2008/08/18 2008/08-18
看完上述內容,你們掌握怎么使用Python re正則表達式模塊的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)-成都網(wǎng)站建設公司行業(yè)資訊頻道,感謝各位的閱讀!
當前題目:怎么使用Pythonre正則表達式模塊-創(chuàng)新互聯(lián)
轉載注明:http://chinadenli.net/article32/gddpc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、定制網(wǎng)站、品牌網(wǎng)站建設、網(wǎng)站改版、小程序開發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容