在python中需要通過正規表示式對字串進行匹配的時候,可以使用乙個模組,名字為re。
例項
#coding=utf-8
# 匯入re模組
import re
# 使用match方法進行匹配操作
# result = re.match(正規表示式,要匹配的字串)
result = re.match("itcast","itcast.cn ***") #匹配成功,返回匹配物件,否則返回none,不是""
# 如果上一步匹配到資料的話,可以使用group方法來提取資料,必須是itcast開頭
print(result.group())
執行結果:
ret = re.match("嫦娥\d號","嫦娥2號發射成功") #嫦娥2號
print(ret.group())
ret = re.match("\d\d\s","嫦娥2號發射成功") #嫦娥2
print(ret.group())
python中字串前面加上 r 表示原生字串
與大多數程式語言相同,正規表示式裡使用"\"作為轉義字元
,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式裡轉義成乙個反斜槓。
python裡的原生字串很好地解決了這個問題,有了原始字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。
print(re.match("[a-za-z_]+[\w]*", "_name1_").group()) #匹配出,變數名是否有效
print(re.match("[1-9]?[0-9]*", "0").group())#匹配出,0到99之間的數字
print(re.match("[a-za-z0-9_]", "1ad12f23s34455ff66").group()) #匹配前乙個字元出現m次
print(re.match("[a-za-z0-9_]", "1ad12f23s34455ff66").group()) #匹配出,8到20位的密碼,可以是大小寫英文本母、數字、下劃線
print(re.match("[\w]@163\.com$", "[email protected]").group()) #匹配163.com的郵箱位址
print(re.match("[1-9]?\d$|100", "100").group()) #匹配出0-100之間的數字
print(re.match("\w@(163|126|qq)\.com$", "[email protected]").group()) #[email protected]
ret = re.match("([^-]*)-(\d+)","11000-12345678")
print(ret.group(1)) #11000
print(ret.group(2)) #12345678 +表示前1個字元至少出現1次
print(re.match(r"\w*", "hh").group()) #匹配出hh
#如果在第一對<>中是什麼,按理說在後面的那對<>中就應該是什麼
print(re.match(r".*", "
").group()) #匹配出
print(re.match(r".*", "
").group())#匹配出
import re
print(re.search(r"\d+", "閱讀次數為 9999").group()) #9999 匹配出文章閱讀的次數
ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345") #統計出python、c、c++相應文章閱讀的次數\
print(ret) #['9999', '7890', '12345']
print(re.sub(r"\d+", '265898', "python = 997")) #python = 265898 sub將匹配到的資料進行替換
print(re.split(r":| ", "「info:xiaozhang 33 shandong」")) #['「info', 'xiaozhang', '33', 'shandong」'] split 根據匹配進行切割字串,並返回乙個列表
正規表示式模式中使用到通配字,那它在從左到右的順序求值時,會盡量「抓取」滿足匹配最長字串。非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面,要求正則匹配的越少越好。
print(re.match(r"aa(\d+)","aa2343ddd").group(1)) #2343
print(re.match(r"aa(\d+?)","aa2343ddd").group(1)) #2
print(re.match(r"aa(\d+)ddd","aa2343ddd").group(1) ) #2343
print(re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)) #2343
Python 正規表示式學習(二)正規表示式語法
一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...
python正規表示式學習
今天學習了python中有關正規表示式的知識。關於正規表示式的語法,不作過多解釋,網上有許多學習的資料。這裡主要介紹python中常用的正 則表示式處理函式。re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import re text jgood is a handso...
python正規表示式學習
python 中的re 模組 正規表示式 就個人而言,主要用它來做一些複雜字串分析,提取想要的資訊 學習原則 夠用就行,需要的時候在深入 現總結如下 正規表示式中特殊的符號 表任意字元 表string起始 表string 結束 跟在字元後面表示,0個 多個,1個 多個,0個或者1個 符合條件的情況下...