正規表示式,又稱規則表示式
正規表示式(regular expression)描述了一種字串匹配的模式(pattern)
1. #代表原子表 儲存表示式 字元集合。匹配所包含的任意乙個字元
[a] #匹配乙個字母a
[abc] #匹配字母a/b/c
[a-z] #匹配任意一位小寫字母
[aabb] #匹配任意一位大小寫字母a/b
[a-za-z] #匹配任意一位字母
[0-9] #匹配任意一位數字
[a-za-z0-9] #匹配任意一位數字或字母
2. ^ #以什麼開頭 在原子表外開頭 以什麼...開頭 在原子表內 取反 相當於 \a
[^a-z] #小寫字母以外的字元
^a[a-za-z] #匹配 以字母a開頭的倆位字母
^[a-za-z] #以任意一位字母開頭的字元
3. $ #以...結尾 ^和 $ 搭配來使用的 這樣才能夠真正的去限制你匹配的內容和長度 相當於\z
^1[3-8][0-9]$ #匹配手機號
^1[38][0-9]$ #匹配手機號
4. #表示前面的數量m個 不能單獨使用
[a][a][a] #匹配3個a
a [a-za-z] #匹配任意3位字母
^[a-za-z] #匹配任意3位字母作為開頭的字串
^[a-za-z][0-9]$
5. #表示前面的數量m-n個 不能單獨使用
^[1-9][0-9]$#匹配qq號
6. #表示前面的數量至少m個 不能單獨使用
7. ? #可有可無 匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 \?
[1-9][0-9]?
[1-9][0-9]
-?[1-9] #一位整數
8. . #匹配換行符\n以外的任意字元
9. * #匹配前面字元任意次
10. .* #匹配換行符以外任意字元任意次 (貪婪模式)
11. .*? #匹配換行符以外任意字元任意次 (非貪婪模式)
12. + #表示匹配數量 最少 1次
13. .+ #表示匹配換行符 以外的任意字元 至少一次 (貪婪模式)
14. .+? #表示匹配換行符 以外的任意字元 至少一次 (非貪婪模式)
15. () #1.乙個單元 2.子儲存
(?:pattern) #只做為乙個單元使用 而不是作為子儲存
(?=pattern) #返回不包含括號裡面的值
re.findall("windows(?=95|98|nt|2000)",'windowsnt')#windows
(?!pattern) #與上面的相反 只要後面的不相等 就會將前面的內容匹配返回
16. | #表示或
常用組合
[.*?]
[\s\s]
貪婪:下面的表示式匹配從開始小於符號 (<) 到關閉 h1 標記的大於符號 (>) 之間的所有內容。
/<.*>/
非貪婪:如果您只需要匹配開始和結束 h1 標籤,下面的非貪婪表示式只匹配 。
/<.*?>/
如果只想匹配開始的 h1 標籤,表示式則是:
/<\w+?>
re.i #忽略大小寫
re.m #多行模式 改變 ^和$的行為
re.s #改變點的行為 可以使.匹配換行符
\d 0-9 相當於[0-9]
\d 取反 相當於[^0-9]
\w 相當於 [a-za-z0-9_]
\w 取反 [^a-za-z0-9_]
\s 匹配空白字元
\s 匹配非空白字元
普通字元包括沒有顯式指定為元字元的所有可列印和不可列印字元。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。
非列印字元也可以是正規表示式的組成部分。下表列出了表示非列印字元的轉義序列:
字元描述
\cx匹配由x指明的控制字元。例如, \cm 匹配乙個 control-m 或回車符。x 的值必須為 a-z 或 a-z 之一。否則,將 c 視為乙個原義的 'c' 字元。
\f匹配乙個換頁符。等價於 \x0c 和 \cl。
\n匹配乙個換行符。等價於 \x0a 和 \cj。
\r匹配乙個回車符。等價於 \x0d 和 \cm。
\s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\s匹配任何非空白字元。等價於 \f\n\r\t\v。
\t匹配乙個製表符。等價於 \x09 和 \ci。
\v匹配乙個垂直製表符。等價於 \x0b 和 \ck。
^[a-za-z0-9_]$ // 所有包含乙個以上的字母、數字或下劃線的字串
^[1-9][0-9]$ // 所有的正整數
^\-[0-9]$ // 所有的整數
^[-]?[0-9]+\.?[0-9]+$ // 所有的浮點數
^[a-za-z0-9_]+$ // 所有包含乙個以上的字母、數字或下劃線的字串
^[1-9][0-9]*$ // 所有的正整數
^\-?[0-9]+$ // 所有的整數
^\-?[0-9]+\.?[0-9]*$ // 所有的浮點數
#以上正負整數浮點數的簡寫
^\-?[0-9]\.?[0-9]$
使用正則 需要匯入 re 正則模組
(1) re.match(正則,字串,修正符)
匹配成功返回 匹配的物件
使用group()方法 獲取到匹配的值
groups() 返回乙個包含所有小組字串的元組,從 1 到 所含的小組號。
匹配失敗 返回 none
注意:從第一位開始匹配
只匹配一次
#給當前匹配到的結果起別名
s = '3g4hfd567'
re.match("(?p\d+)",s)
print(x.group(0))
print(x.group('value'))
(2) re.search(正則,字串,修正符)
匹配成功返回 匹配的物件 使用group()方法 獲取到匹配的值
匹配失敗 返回 none
注意:只要字串包含就可以
只匹配一次
(3) re.findall(正則,字串,修正符)
匹配成功返回列表
注意:匹配多次
(4) re.sub/re.subn 正則的替換
sub(正則,替換成誰,字串,替換的次數) 返回匹配後的結果
subn(正則,替換成誰,字串,替換的次數) 返回匹配後的結果和次數
例項
import re
# 將匹配的數字乘於 2
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'a23g4hfd567'
print(re.sub('(?p\d+)', double, s))
(5) re.finditer 將查詢結果變成 迭代器 的形式 返回 配合next方法來使用
next()
走完以後 返回 stopiteration
(6) re.split 正則拆分
re.split("\w",mystr)
(7) preg = re.compile("1[3-8][0-9]")
以後使用 這種方式 居多 將正則 和函式 分開 執行效率 要高
使用方法re.compile("正則","修正符")
轉換的正則物件.正則的函式(字串)\
修正符的區別:
re.i(ignorecase) #不區分大小寫
re.s(dotall) #改變點的行為
re.m(multiline) #多行模式
Python筆記 re(正則)筆記
import rere.findall 返回匹配結果 列表 re.sub 替換字元 根據正則規則替換 re.compile 編譯正規表示式 當需要多次使用時更效率 re.findall 今天天氣 d c,多雲 待匹配字串 d 表示至少乙個數字 re.findall 記錄常用的 筆記 待匹配字串 表示...
re 正則表達筆記
span 跨度 pattern 模式 todo re.match todo 返回開頭匹配的結果,若開頭無匹配項,則返回none print re.match www www.runoob.com print re.match www www.runoob.com span 0,3 print re....
python正則re使用
1 import re 將正規表示式編譯成pattern物件 pattern re.compile r hello re.i 使用pattern匹配文字,獲得匹配結果,無法匹配時將返回none match pattern.match hello world if match 使用match獲得分組資...