正則表達式(Regular Expression)是一種用來描述、匹配和搜索文本中模式的語言。Python語言內置了re模塊,它為正則表達式操作提供了豐富的函數和類,使得我們能夠方便地在Python程序中使用正則表達式。
一、正則表達式的基本元素
正則表達式是由普通字元(如字母、數字、空格和標點等)和特殊字元(元字元)組成的字元串。
元字元是正則表達式中具有特殊意義的字元,例如: . ^ $ * + ? { } [ ] \ | ()。其中有些元字元是單字母,如 .,表示匹配除換行符外的任何單個字元。而有些元字元是多個字元組成的,如 {n,m},表示匹配前一個字元n到m次。在正則表達式中,元字元通常用來描述模式的某些特性,例如描述一個字元串是由哪些字元組成的。
import re
pattern = "abc" # 定義正則表達式模式
string = "hello, abc, match me!" # 定義需要匹配的字元串
result = re.match(pattern, string) # 匹配字元串
print(result)
運行上面的代碼會輸出一個Match對象,表示匹配成功。其中,pattern是正則表達式模式,string是需要匹配的字元串,re.match(pattern, string)函數返回一個Match對象,表示匹配成功。
二、正則表達式的常見操作
1、re.match函數
re.match函數用來嘗試從字元串的起始位置匹配一個模式。如果匹配成功,則返回一個Match對象,否則返回None。
import re
pattern = "abc" # 定義正則表達式模式
string = "hello, abc, match me!" # 定義需要匹配的字元串
result = re.match(pattern, string) # 匹配字元串
print(result)
運行上面的代碼會輸出一個Match對象,表示匹配成功。
2、re.search函數
re.search函數用來在字元串中搜索匹配正則表達式的第一個位置,如果匹配成功,則返回一個Match對象,否則返回None。
import re
pattern = "abc" # 定義正則表達式模式
string = "hello, abc, match me!" # 定義需要匹配的字元串
result = re.search(pattern, string) # 搜索字元串
print(result)
運行上面的代碼會輸出一個Match對象,表示匹配成功。
3、re.findall函數
re.findall函數用來在字元串中搜索匹配正則表達式的所有位置,返回一個列表。
import re
pattern = "\d+" # 定義正則表達式模式,匹配連續的數字
string = "hello, 1234, 5678, match me!" # 定義需要匹配的字元串
result = re.findall(pattern, string) # 查找字元串
print(result)
運行上面的代碼會返回一個列表,其中包含所有匹配的數字。
三、正則表達式實戰
1、匹配Email地址
下面的代碼定義了一個正則表達式模式,用於匹配Email地址。其中,「\w」表示匹配任意一個字母、數字或下劃線,「+」表示匹配前面的字元1次或多次,「.」表示匹配任意一個字元。
import re
pattern = "\w+@\w+\.\w+" # 定義正則表達式模式,匹配Email地址
string = "My Email address is yourname@domain.com" # 定義需要匹配的字元串
result = re.search(pattern, string) # 搜索字元串
if result:
print(result.group())
運行上面的代碼會輸出匹配到的Email地址「yourname@domain.com」。
2、匹配手機號碼
下面的代碼定義了一個正則表達式模式,用於匹配手機號碼。其中,以1開頭的11位數字。不難發現,此處使用了Python語言的字元串格式化技術,將正則表達式模式和需要匹配的字元串結合在一起。
import re
pattern = "^1[0-9]{10}$" # 定義正則表達式模式,匹配手機號碼
string = "My phone number is 13888888888" # 定義需要匹配的字元串
result = re.search(pattern, string) # 搜索字元串
if result:
print(result.group())
運行上面的代碼會輸出匹配到的手機號碼「13888888888」。
3、匹配IP地址
下面的代碼定義了一個正則表達式模式,用於匹配IP地址。其中,每個組成IP地址的數字為0到255之間的整數。
import re
pattern = "(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.(25[0-5]|2[0-4]\d|[01]?\d\d?)){3}" # 定義正則表達式模式,匹配IP地址
string = "My IP address is 192.168.1.1" # 定義需要匹配的字元串
result = re.search(pattern, string) # 搜索字元串
if result:
print(result.group())
運行上面的代碼會輸出匹配到的IP地址「192.168.1.1」。
4、替換文本中的字元串
下面的代碼定義了一個正則表達式模式,用於匹配字元串中的「Python」字元串。使用re.sub函數將所有「Python」替換為「Java」。
import re
pattern = "Python" # 定義正則表達式模式,匹配字元串中的「Python」
string = "I love Python, I am learning Python" # 定義需要匹配的字元串
new_string = re.sub(pattern, "Java", string) # 將字元串中所有的「Python」替換為「Java」
print(new_string)
運行上面的代碼會輸出替換後的字元串:「I love Java, I am learning Java」。
5、提取HTML中的鏈接
下面的代碼定義了一個正則表達式模式,用於提取HTML中的鏈接。使用re.findall函數查找HTML中所有的鏈接。
import re
pattern = '(.*?)' # 定義正則表達式模式,匹配HTML中的鏈接
html = '百度一下谷歌一下' # 定義需要匹配的字元串
result = re.findall(pattern, html) # 查找字元串中所有的鏈接
for link, name in result:
print(link, name)
運行上面的代碼會輸出HTML中兩個鏈接的URL和顯示的文字。
通過上面的例子,我們可以看到正則表達式在Python中的應用非常廣泛,並且能夠幫助我們快速地對文本進行匹配和搜索。以上只是一個簡單的入門介紹,正則表達式的表達能力非常強大,如果想深入學習正則表達式的相關知識,在此推薦一份正則表達式的學習資料,地址為https://www.runoob.com/regexp/regexp-tutorial.html,希望對大家有所幫助。
原創文章,作者:KKEHS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330212.html