python 使用正則表示式
阿新 • • 發佈:2021-08-19
python 使用正則表示式
在python中 正則的操作在 re 模組中
常用方法
import re
# 第一個引數 匹配規則 第二個引數 需要匹配的字串
# re.match()
# re.search() 只對字串查詢一次 返回值型別 都是 re.Match 不同點 match 是從頭開始 一旦匹配失敗 返回None search 是在整個字串中查詢
# re.findall() 得到所有匹配到的字串 放入列表中
# re.finditer() 查詢所有的匹配到的字元的下標 返回一個可迭代物件
# re.fullmatch() 需要完全匹配
re.Match 類
m = re.search('h','hello') print(m.pos,m.endpos) # 返回的是 字串長度 0 5 print(m.span()) # 返回的開始 和 結束下標 (0, 1) print(m.group()) # 返回的是 得到的字串 h 可以傳參 組 以() 分離的正則規則 m.groupdict() # 獲得分組組成的字典 (?P<xxx>*) xxx 和其匹配的字元
re.compile 方法的使用
m = re.search('h','hello')
print(m) # <re.Match object; span=(0, 1), match='h'>
x = re.compile('h') # 正則規則
print(x.search('hello')) #<re.Match object; span=(0, 1), match='h'>
正則替換
# 第一個引數是正則表示式 # 第二個引數 是新字元或者函式 # 第三個引數 是要替換的字串 t = 'hfasifh49594asf329' print(re.sub(r'\d', 'x', t)) # hfasifhxxxxxasfxxx def text(x): y = int(x.group(0)) y *=2 return str(y) print(re.sub(r'\d', text, t)) # 所有的數字乘2 hfasifh81810188asf6418
貪婪模式和非貪婪模式
# 在python中 預設是貪婪模式 儘可能的多匹配 *
m = re.search('h.*l','hello')
print(m) # <re.Match object; span=(0, 4), match='hell'>
# 懶惰模式 儘可能的少匹配 ?
n = re.search('h.?l','hello')
print(n) # <re.Match object; span=(0, 3), match='hel'>
正則表示式
數字 和 字母 表示其自身
字元 | 描述 |
---|---|
[ABC] | 匹配 [...] 中的所有字元,例如 [aeiou] |
[^ABC] | 匹配除了 [...] 中字元的所有字元,例如 [^aeiou] 匹配字串 "google runoob taobao" 中除了 e o u a 字母的所有字母。 |
[A-Z] | [A-Z] 表示一個區間,匹配所有大寫字母,[a-z] 表示所有小寫字母。 |
. | 匹配除換行符(\n、\r)之外的任何單個字元,相等於 [^\n\r]。 |
很多字母前面加 \ 會有特殊含義
字元 | 描述 |
---|---|
\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]。注意 Unicode 正則表示式會匹配全形空格符。 |
\S | 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。 |
\t | 匹配一個製表符。等價於 \x09 和 \cI。 |
\v | 匹配一個垂直製表符。等價於 \x0b 和 \cK。 |
\d | 匹配數字 等價[0-9] |
\D | 匹配非數字 等價[ ^0-9 ] |
\w | 表示數字 字母 及 _ 下劃線 |
\W | 非數字字母下劃線 |
大部分標點符號都有特殊含義 如果 要使用 在前面加上 轉義字元 \
特別字元 | 描述 |
---|---|
$ | 匹配輸入字串的結尾位置。如果設定了 RegExp 物件的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字元本身,請使用 $。 |
( ) | 標記一個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 ( 和 )。 |
* | 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 *。 |
+ | 匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 +。 |
. | 匹配除換行符 \n 之外的任何單字元。要匹配 . ,請使用 . 。 |
[ | 標記一箇中括號表示式的開始。要匹配 [,請使用 [。 |
? | 匹配前面的子表示式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字元,請使用 ?。 |
\ | 將下一個字元標記為或特殊字元、或原義字元、或向後引用、或八進位制轉義符。例如, 'n' 匹配字元 'n'。'\n' 匹配換行符。序列 '\' 匹配 "",而 '(' 則匹配 "("。 |
^ | 匹配輸入字串的開始位置,除非在方括號表示式中使用,當該符號在方括號表示式中使用時,表示不接受該方括號表示式中的字元集合。要匹配 ^ 字元本身,請使用 ^。 |
{ | 標記限定符表示式的開始。要匹配 {,請使用 {。 |
| | 指明兩項之間的一個選擇。要匹配 |,請使用 |。 |
修飾符
修飾符 | 含義 | 描述 |
---|---|---|
i | ignore - 不區分大小寫 | 將匹配設定為不區分大小寫,搜尋時不區分大小寫: A 和 a 沒有區別。 |
g | global - 全域性匹配 | 查詢所有的匹配項。 |
m | multi line - 多行匹配 | 使邊界字元 ^ 和 $ 匹配每一行的開頭和結尾,記住是多行,而不是整個字串的開頭和結尾。 |
s | 特殊字元圓點 . 中包含換行符 \n | 預設情況下的圓點 . 是 匹配除換行符 \n 之外的任何字元,加上 s 修飾符之後, . 中包含換行符 \n。 |