python中如何正確使用Regex的詳細模式(Verbose mode expression),pythonverbose
簡單介紹
Regex並不是Python的一部分。Regex是用於處理字串的強大工具,擁有自己獨特的文法以及一個獨立的處理引擎,效率上可能不如str內建的方法,但功能十分強大。得益於這一點,在提供了Regex的語言裡,Regex的文法都是一樣的,區別只在於不同的程式設計語言實現支援的文法數量不同;但不用擔心,不被支援的文法通常是不常用的部分。如果已經在其他語言裡使用過Regex,只需要簡單看一看就可以上手了。
展示了使用Regex進行匹配的流程:
Regex的大致匹配過程是:依次拿出運算式和文本中的字元比較,如果每一個字元都能匹配,則匹配成功;一旦有匹配不成功的字元則匹配失敗。
引言
當大家寫的Regex比較長,比較複雜時,發現經常會寫錯,或者很難維護,遇到這種情況怎麼辦呢?這個不用急,聰明的設計人員早已經想到這種情況了,提供了一種叫做詳細模式(Verbose mode expression)。當你使用這種模式時,可以給Regex添加註釋,這樣在維護時就不會像看天書了,同時也可以添加額外的空格,進行對齊排版。
緊湊模式的例子:
import re address = re.compile('[\w\d.+-]+@([\w\d.]+\.)+(com|org|edu)') candidates = [ u'first.last@example.com', u'first.last+category@gmail.com', u'valid-address@mail.example.com', u'not-valid@example.foo', ] for candidate in candidates: match = address.search(candidate) print('{:<30} {}'.format( candidate, 'Matches' if match else 'No match') )
詳細模式的修改之後:
#python 3.6 #蔡軍生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re address = re.compile( ''''' [\w\d.+-]+ # username @ ([\w\d.]+\.)+ # domain name prefix (com|org|edu) # TODO: support more top-level domains ''', re.VERBOSE) candidates = [ u'first.last@example.com', u'first.last+category@gmail.com', u'valid-address@mail.example.com', u'not-valid@example.foo', ] for candidate in candidates: match = address.search(candidate) print('{:<30} {}'.format( candidate, 'Matches' if match else 'No match'), )
結果輸出如下:
first.last@example.com Matchesfirst.last+category@gmail.com Matchesvalid-address@mail.example.com Matchesnot-valid@example.foo No match
參數解釋:X VERBOSE
該標誌通過給予你更靈活的格式以便你將Regex寫得更易於理解。當該標誌被指定時,在 RE 字串中的空白符被忽略,除非該空白符在字元類中或在反斜線之後;這可以讓你更清晰地組織和縮排 RE。它也可以允許你將注釋寫入 RE,這些注釋會被引擎忽略;注釋用 "#"號 來標識,不過該符號不能在字串或反斜線之後。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對幫客之家的支援。