Python學習筆記模式匹配與正則表達式之用正則表達式匹配更多模式
隨筆記錄方便自己和同路人查閱。
#------------------------------------------------我是可恥的分割線-------------------------------------------
既然你已知道用 Python 創建和查找正則表達式對象的基本步驟,就可以嘗試一些更強大的模式匹配功能了。
#------------------------------------------------我是可恥的分割線-------------------------------------------
1、利用括號分組,示例代碼:
#! python 3 # -*- coding:utf-8 -*- # Autor: Li Rong Yang import re#用 import re 導入正則表達式模塊。 phoneNumregex = re.compile(r‘(\d{3})-(\d{3}-\d{4})‘)#使用括號進行分組。 text = phoneNumregex.search(‘My number is 415-555-4242‘)#向 Regex 對象的 search()方法傳入想查找的字符串。它返回一個 Match 對象。 print(text.group(1))#調用 Match 對象的 group()方法,返回分組1的內容。
運行結果:
2、用管道匹配多個分組,示例代碼:
字符|稱為“管道”。希望匹配許多表達式中的一個時,就可以使用它。例如,正則表達式 r‘Batman|Tina Fey‘將匹配‘Batman‘或‘Tina Fey‘。
如果 Batman 和 Tina Fey 都出現在被查找的字符串中,第一次出現的匹配文本,將作為 Match 對象返回。
3、用問號實現可選匹配,示例代碼:
有時候,想匹配的模式是可選的。就是說,不論這段文本在不在,正則表達式都會認為匹配。字符?表明它前面的分組在這個模式中是可選的。
4、用星號匹配零次或多次,示例代碼:
*(稱為星號)意味著“匹配零次或多次”,即星號之前的分組,可以在文本中出Python 編程快速上手——讓繁瑣工作自動化現任意次。它可以
完全不存在,或一次又一次地重復。
對於‘Batman‘,正則表達式的(wo)*部分匹配 wo 的零個實例。對於‘Batwoman‘,(wo)*匹配 wo 的一個實例。對於‘Batwowowowoman‘,(wo)*匹配
wo 的 4 個實例。
如果需要匹配真正的星號字符,就在正則表達式的星號字符前加上倒斜杠,即\*。
5、用加好匹配一次或多次,示例代碼:
*意味著“匹配零次或多次”,+(加號)則意味著“匹配一次或多次”。星號不要求分組出現在匹配的字符串中,但加號不同,加號前面的分組必須“至少
出現一次”。這不是可選的。
正則表達式 Bat(wo)+man 不會匹配字符串‘The Adventures of Batman‘,因為加號要求 wo 至少出現一次。
如果需要匹配真正的加號字符,在加號前面加上倒斜杠實現轉義:\+。
6、用花括號匹配特定次數,示例代碼:
#! python 3 # -*- coding:utf-8 -*- # Autor: Li Rong Yang import re#用 import re 導入正則表達式模塊。 phoneNumregex = re.compile(r‘(\d{3})-(\d{3}-\d{4})‘)#使用括號進行分組。 text = phoneNumregex.search(‘My number is 415-555-4242‘)#向 Regex 對象的 search()方法傳入想查找的字符串。它返回一個 Match 對象。 print(text.group(1))#調用 Match 對象的 group()方法,返回分組1的內容。 phoneNumregex = re.compile(r‘(\d\d\d)-(\d\d\d-\d\d\d\d)‘)#使用括號進行分組。 text = phoneNumregex.search(‘My number is 415-555-4242‘)#向 Regex 對象的 search()方法傳入想查找的字符串。它返回一個 Match 對象。 print(text.group(1))#調用 Match 對象的 group()方法,返回分組1的內容。
運行結果:
根據結果可以看出,兩段代碼效果完全一致,花括號只是匹配相同內容的次數。
Python學習筆記模式匹配與正則表達式之用正則表達式匹配更多模式