python 正則表達式


正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規(guī)則,凡是符合規(guī)則的字符串,我們就認為它“匹配”了,否則,該字符串就是不合法的。


因為正則表達式也是用字符串表示的,所以,我們要首先了解如何用字符來描述字符。

正則表達式匹配:

如果直接給出字符,就是精確匹配。

?\d 可以匹配一個數(shù)字

\w 可以匹配一個字母或數(shù)字

?.?可以匹配任意字符


要匹配變長的字符,在正則表達式中:

用 * 表示任意個字符(包括0個)

用 + 表示至少一個字符

用 ? 表示0個或1個字符

用 {n} 表示n個字符

用 {n,m} 表示n-m個字符

特殊字符 要用'\'轉義


正則表達式實例:

實例1:

\d{3}\s+\d{3,8}

\d{3} 表示匹配3個數(shù)字 ?例如010

\s 匹配一個空格或tab,\s+表示至少有一個空格 例如 ‘ ’

\d{3,8} 表示3-8個數(shù)字,例如‘1234567’


實例2:

‘0574-65972291’

\d{4}\-\d{4,8}

\w

正則表達式進階:

要做更精確地匹配,可以用 [ ] 表示范圍


A|B 可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'

^表示行的開頭,^\d表示必須以數(shù)字開頭,$表示行的結束,\d$表示必須以數(shù)字結束。


re模塊

Python提供re模塊,包含所有正則表達式的功能。由于Python的字符串本身也用 \ 轉義,因此使用Python的r前綴,就不用考慮轉義的問題了。

例如: s = r ' ABC\-001 '

案例:

match( )方法?判斷是否匹配,如果匹配成功,返回Match對象,否則返回None。



正則切分字符串

用正則表達式切分字符串比用固定的字符更靈活,請看正常的切分代碼

>>> 'a b ?c'.split(' ')

['a', 'b', '', '', 'c']

>>>re.split(r'\s+','a b? c')
['a','b','c']

如果用戶輸入了一組標簽,下次記得用正則表達式來把不規(guī)范的輸入轉化成正確的數(shù)組。


分組

除了簡單地判斷是否匹配之外,正則表達式還有提取子串的強大功能。用 ( ) 表示的就是要提取的分組(Group)



貪婪匹配

正則匹配默認是貪婪匹配,也就是匹配盡可能多的字符。

由于\d+采用貪婪匹配,直接把后面的0全部匹配了,結果0*只能匹配空字符串了。

必須讓\d+采用非貪婪匹配(也就是盡可能少匹配),才能把后面的0匹配出來,加個?就可以讓\d+采用非貪婪匹配:


編譯

當我們在Python中使用正則表達式時,re模塊內(nèi)部會干兩件事情:

1. 編譯正則表達式,如果正則表達式的字符串本身不合法,會報錯;

2. 用編譯后的正則表達式去匹配字符串。


如果一個正則表達式要重復使用幾千次,出于效率的考慮,我們可以預編譯該正則表達式,接下來重復使用時就不需要編譯這個步驟了,直接匹配:


編譯后生成Regular Expression對象,由于該對象自己包含了正則表達式,所以調(diào)用對應的方法時不用給出正則字符串。


筆記摘自:廖雪峰官網(wǎng):www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000#0

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容