正規表示式(regular expression)描述了一種字串匹配的模式(pattern),可以用來檢查乙個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
構造正規表示式的方法和建立數學表示式的方法一樣。也就是用多種元字元與運算子可以將小的表示式結合在一起來建立更大的表示式。正規表示式的元件可以是單個的字元、字元集合、字元範圍、字元間的選擇或者所有這些元件的任意組合。
正規表示式是由普通字元(例如字元 a 到 z)以及特殊字元(稱為"元字元")組成的文字模式。模式描述在搜尋文字時要匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。
1.字元
2.量詞
1.re常用的一些方法
match: 從頭開始匹配 一旦匹配失敗就返回none
search: 在整個字串進行匹配
共同點: 1、只對字串查詢一次 2 返回值都是 re.match物件
finditer: 返回可迭代物件 查詢所有匹配資料放到乙個可迭代物件
findall: 將所有查詢到的字串的列表放到乙個列表裡
fullmatch: 完整匹配 字串需要完全滿足規則
注: 呼叫 re.match re.search 或者對re.finditer 結果進行遍歷 結果都是re.match物件
1.獲取到research匹配字串的結果
data_str =
"qwert12yui3o5p6a7d8fkglctsdfstg"
p1 = re.search(r'2.*3.*5.*7.*8'
, data_str)
# 獲取到匹配字串的結果
# 用group表示正規表示式的分組
# 如果沒有分組 預設只有一組
# 分組下表從0開始
p2 = re.search(r'(2.*)3.*5.*(7.*8)'
, data_str)
# 在正規表示式中使用()表示乙個分組
# (?p表示式) 可以給分組起名字
p3 = re.search(r'(?p2.*)3.*5.*(7.*8)'
, data_str)
2.同乙個規則匹配不同字串
data_str =
"qazxs13wedc12cdews12123\nxzaq12313"
r = re.
compile
(r'.*e'
)print
(r.search(data_str)
)
3.正則修飾符
# 正規表示式規則
# 數字和字母表示本事
# 很多字母前面新增 \ 會有特殊含義
# 絕大多數標點符號都有特殊含義
# 如果想要使用標點符號需要加\
print(re.search(r'x', "hello xyz"
))print(re.search(r'5', "dst56"
))print(re.search(r'\d', "dsdfs242"
))print(re.search(r'\+', "ddd+++"
))# \s表示任意非列印字元
print(re.search(r'\s', "hello \sworld "
), "ffffff"
)# \n表示換行
print(re.search(r'\n', "hello \nnworld "
), "ffffff"
)# \t 製表符
x ="hello world"
print(re.search(r'\s', x))
# 空格
# # 特殊字元
# # () 用來表示乙個分組
# . 表示除了換行以外的任意字元 如果想要匹配 需要使用、\.
print(re.search(r'h(\d+)x', "dddsdh43xfad"
))print(re.search(r'(.*)', '(1+1)*3+5'
))print(re.search(r'\(.*\)', '(1+1)*3+5'
))
4.區間可選項
# 用來表示區間可選項 [x-y]從x到y區間 包含x和y [0-9]從1-9
m2 = re.search(r'f[0-9]+m', 'fmf421513453m'
)m3 = re.search(r'f[a-z]m', 'f5mfgm'
)# 或者關係 0m4 = re.search(r'f[0-1a-dx]+m', 'fmf421513453mafsfdm'
)print(m2)
# | 表示或者 和區別 裡面表示的是區間 |中間表示可選值
m2 = re.search(r'f(x|v|d)m', 'fvmf421513453mafsfdm'
)
5.用來規定出現的次數
# {}用來規定出現的次數 表示n次以上 表示前面出現n次及n次以下 表示出現次數m到n次
m3 = re.search(r'o', "goooooood"
)print(m3)
# * 表示前面的元素出現任意次數(0) 次以上 + 表示前面元素至少出現一次 等價於
m4 = re.search(r'go*d', "goooood"
)print(m4)
m5 = re.search(r'go+d', "goooood"
)print(m5)
6.貪婪模式與非貪婪模式
在python的匹配中預設是貪婪模式 盡可能多的匹配 新增?可將貪婪模式轉化為非貪婪模式 盡可能少的匹配
# 只匹配到aa2
print(re.search(r'aa\d+?', "aa2233ddd"
))# 能夠匹配到aa2233
print(re.search(r'aa\d+', "aa2233ddd"
))#因為後面有ddd所以會將數字全部匹配
print(re.search(r'aa(\d+?)ddd', "aa2233ddd"
))print(re.search(r'aa(\d+)ddd', "aa2233ddd"
))
1.判斷使用者輸入內容是否是數字,如果是數字 則轉換成資料型別
re.fullmatch(r'\d+(\.?\d+)?', num)
2.以非數字開頭,後面偶字母數字_ 組成的長度4到14位的字串
re.search(r'^\d[a-za-z_\-]', data)
3.手機號匹配
re.fullmatch(r'^((
13[0,5
-9])|(
15[0
-9]))
[0-9]$', data)
4.身份證號匹配
re.fullmatch(r'^[1-9]\d(18|19|20|21)\d(([0-2][1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d[0-9x]', data)
5.車牌號匹配
re.fullmatch(r'^[京豫警軍a-z][a-z][a-z0-9][a-z0-9掛學警]', data)
Python re 正則模組
有些字元比較特殊,它們和自身並不匹配,而是會表明應和一些特殊的東西匹配,或者它們會影響到 re 其它部分的重複次數,它們叫元字元。其中 m 和 n 是十進位制整數。該限定符的意思是至少有 m 個重複,至多到 n 個重複。舉個例子,a b 將匹配 a b a b 和 a b 它不能匹配 ab 因為沒有...
Python re正則模組
對於比較複雜的字串處理任務,需要依靠正規表示式。首先需要匯入 re 模組 import re常用的元字元 符號含義 匹配除 n 和 r 之外的任何單個字元。匹配字串開始位置 匹配字串結束位置 前面的元素重複0次,1次或多次 前面的元素重複0次或1次 前面的元素重複1次或多次 前面的元素出現了n次 前...
python re模組與正則
正規表示式中的轉義符在python的字串中也剛好有轉移的作用,但是正規表示式中的轉義符和字串中的轉義符並沒關係,且還容易有衝突。為了避免這種衝突,我們所有的正則都以在工具中的測試結果為結果,然後只需要在正則和待匹配的字串外面都加r即可 print n n print n n print r n n ...