Python正則表達式 快速參考 常用函數: re.match():從字元串的起始位置匹配一個正則表達式。 re.search():掃描整個字元串並返回第一個成功的匹配。 re.sub():用於替換字元串中的匹配項。 re.compile():用於編譯正則表達式,生成一個正則表達式(Pattern) ...
Python正則表達式
目錄快速參考
常用函數:
re.match():從字元串的起始位置匹配一個正則表達式。
re.search():掃描整個字元串並返回第一個成功的匹配。
re.sub():用於替換字元串中的匹配項。
re.compile():用於編譯正則表達式,生成一個正則表達式(Pattern)對象。供match()和search()這兩個函數使用。
re.findAll():在字元串中找到正則表達式所匹配的所有子串,並返回一個列表。
re.finditer():在字元串中找到正則表達式所匹配的所有子串,並返回一個迭代器。
re.split():split 方法按照能夠匹配的子串將字元串分割後返回列表。
元字元:具有特殊含義的字元
特殊序列:特殊序列指的是\
後跟下表中的某個字元,擁有特殊含義。
集合:集合(Set)是一對方括弧 []
內的一組字元,具有特殊含義
正則表達式修飾符
函數詳解
match()
re.match(): 從字元串的起始位置(開頭)匹配一個正則表達式,匹配成功返回一個Match對象,匹配失敗返回None。
re.match(pattern, string, flags=0)
# pattern:正則表達式;string:字元串;flags:正則表達式修飾符
示例:
_str = 'https://www.baidu.com/'
print(re.match('https', _str))
print(re.match('baidu', _str))
結果圖:
search()
re.search():掃描整個字元串來匹配正則表達式,如果匹配成功,則返回第一個匹配成功的Match對象,匹配失敗則返回None。
re.search(pattern,string,flags=0)
# pattern:正則表達式;string:字元串;flags:正則表達式修飾符
示例:
_str = 'https://www.baidu.com/'
print(re.search('baidu', _str))
print(re.search('goole', _str))
結果圖:
捕獲和分組
示例:
_str = 'Cats are smarter than dogs'
# r:字元串為非轉義的原始字元串 ():捕獲和分組 .:除了換行符的所有字元 *:零次或者多次出現
# (.*)是第一個分組,.*表示匹配除了換行符之外的所有字元;(.*?)是第二個分組,.*後面的?代表非貪婪模式,只匹配符合條件的最少的字元
# 最後一個.*不是分組,不會計入匹配結果;|表示兩者任一
# re.M:多行匹配,影響^和$;re.I:大小寫不敏感
# 匹配的正則表達式中的空格對結果影響很大
matchObject = re.match(r'(.*) are (.*?) .*', _str, re.M | re.I)
if matchObject:
print(matchObject.groups())
print(matchObject.group())
print(matchObject.group(1))
print(matchObject.group(2))
結果截圖:
groups是包含分組匹配項的元組;group()或者group(0)是整個正則表達式的匹配項;group(1)和group(2)分別是兩個分組的匹配項;當調用group(3)時會報錯,因為沒有第三個分組
Match對象
_str = 'https://www.baidu.com/'
_result = re.match('https', _str)
print(_result)
print(_result.span())
print(_result.start())
print(_result.end())
print(_result.group())
sub()
re.sub():用於替換字元串中正則表達式的匹配項。
re.sub(pattern, repl, string, count=0, flags=0)
# pattern:正則表達式;repl:替換的字元串或者函數;string:字元串;
# count:最大替換次數,預設0代表替換所有匹配正則表達式;flags:正則表達式修飾符
示例:
_phone = '2004-959-559 # 這是一個國外電話號碼'
# 刪除字元串中的Python註釋
_phone = re.sub(r'#.*$', '', _phone)
print(_phone)
# 刪除字元串中的-
_num = re.sub(r'\D', '', _phone)
print(_num)
# 刪除字元串中的-
_num = re.sub(r'-', '', _phone)
print(_num)
# 刪除字元串中第一個-
_num = re.sub(r'-', '', _phone, 1)
print(_num)
結果圖:
示例(repl參數是一個函數):
# 將字元串中的匹配的數字*2
def doubleNum(matched):
_value = int(matched.group('value'))
return str(_value * 2)
_str = 'cxk666cxk456cxk250'
# 分組匹配
_result = re.sub(r'(?P<value>\d+)', doubleNum, _str)
print(_result)
結果圖:
compile()
compile()函數用於編譯正則表達式,生成一個正則表達式對象(RegexObject) ,供match()和search()這兩個函數使用。
re.compile(pattern[, flags])
# pattern:正則表達式;flags:正則表達式修飾符
示例:
_str = 'cxk666cxk456cxk250'
# re.compile函數,compile函數用於編譯正則表達式,生成一個正則表達式對象
_pattern = re.compile(r'\d+') # 匹配至少一個數字
_result = _pattern.search(_str)
print(_result)
結果圖:
findall()
findall():在字元串中找到正則表達式所匹配的所有子字元串並返回一個列表。如果有多個匹配模式,則返回元祖列表;如果沒有找到匹配子串,則返回空列表。
findall(string[, pos[, endpos]])
# string:字元串;pos:可選參數,字元串的起始位置,預設為0;endpos:可選參數,字元串的結束位置,預設為字元串長度。
示例:
_str = 'cxk666cxk456cxk250'
_pattern = re.compile(r'\d+') # 匹配至少一個數字
_result = _pattern.findall(_str)
print(_result)
結果圖:
多個匹配模式示例:
_str = 'cxk666cxk456cxk250'
_pattern = re.compile(r'([a-z]+)(\d+)') #按小寫字母和數字分開匹配
_result = _pattern.findall(_str)
print(_result)
結果圖:
finditer()
finditer():在字元串中找到正則表達式所匹配的所有子串,並將結果作為一個迭代器返回。
re.finditer(pattern, string, flags=0)
# string:字元串;pattern:正則表達式;flags:正則表達式修飾符
示例:
# finditer
_str = 'cxk666cxk456cxk250'
_iter = re.finditer(r'\d+', _str)
for _it in _iter:
print(_it.group())
結果圖:
split()
split() 方法按照能夠匹配的子串將字元串分割後返回列表。註意:是分割,而不是取某一部分。
re.split(pattern, string[, maxsplit=0, flags=0])
# pattern:正則表達式;string:字元串;maxsplit:分隔次數,預設為 0,不限制次數;flags:正則表達式修飾符
示例:
_str = 'cxk sing jump rap basketball'
_result = re.split(r'(\S+ )', _str)
print(_result)
結果圖:
參考博客與示例代碼
示例代碼:https://gitee.com/mr-wildfire/PythonRegExDemo/
參考博客:
感謝:Python 正則表達式 | 菜鳥教程 (runoob.com)
感謝:Python RegEx (w3school.com.cn)