1. 程式人生 > 其它 >python 使用正則表示式

python 使用正則表示式

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]
匹配字串 "google runoob taobao" 中所有的 e o u a 字母。
[^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。