正規表示式

2021-09-28 10:52:35 字數 3592 閱讀 4197

正規表示式(regex)是電腦科學的乙個概念。正規表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。

通過使用正規表示式,可以:

測試字串內的模式

例如,可以測試輸入字串,以檢視字串內是否出現**號碼模式或信用卡號碼模式。這稱為資料驗證。

替換文字

可以使用正規表示式來識別文件中的特定文字,完全刪除該文字或者用其他文字替換它。

基於模式匹配從字串中提取子字串

可以查詢文件內或輸入域內特定的文字。

正規表示式主要依賴於元字元。元字元是具有特殊含義的字元。下面是一些元字元的介紹:

元字元描述

^匹配字串的開頭

$匹配字串的末尾

.匹配任意字元,除了換行符,當re.dotall標記被指定時,則可以匹配包括換行符的任意字元.也可以使用(.| \n)

[ ]匹配方括號內的任意字元。[abc]匹配』a』,『b』或』c』。 方括號中的句號就表示句號,ab[.]就匹配』ab.'字串

[^ ]

否定的字元種類. 匹配除了方括號裡的任意字元[^abc]匹配除了a,b,c之外的字元

*匹配》=0個重複的在』*'號之前的字元.

+匹配》=1個重複的』+'號前的字元.

?標記』?'之前的字元為可選.(0個或1個,非貪婪模式)

精確匹配n個前面表示式. 例如,l 不能匹配 「lot」 中的 「l」,但是能匹配 「hello」 中的兩個l。

配n個前面表示式。例如, o 不能匹配"lot"中的"l",但能匹配 "helllllllo"中的所有 l 。「o」 等價於 「o+」。「o」 則等價於 「o*」。

匹配num個大括號之前的字元 (n <= num <= m),貪婪模式.

a |b

匹配a或b

\轉義字元,用於匹配一些保留的字元[ ] ( ) . * + ? ^ $ \ |

(pattern)

對正規表示式分組並記住匹配的文字

(?:pattern)

匹配 pattern 但不獲取匹配結果,也就是說這是乙個非獲取匹配,不進行儲存供以後使用。這在使用 「或」 字元 (|) 來組合乙個模式的各個部分是很有用。例如, 'industr(?:y | ies) 就是乙個比 『industry | industries』 更簡略的表示式。

a(?=b)

匹配後面有b的a

a(?!=b)

匹配後面沒有b的a

(?<=a)b

匹配前面有a的b

(?匹配前面沒有a的b

(?|pattern)

正向否定預查,在任何不匹配pattern的字串開始處匹配查詢字串。這是乙個非獲取匹配,該匹配不需要獲取供以後使用。

\w匹配字母數字及下劃線,等價於』[a-za-z0-9_]』

\w匹配非字母數字及下劃線,等價於 『[^a-za-z0-9_]』

\s匹配任意空白字元,等價於[\f\n\r\t\v]

\s匹配任意非空字元,等價於 [^\f\n\r\t\v]

\f匹配乙個換頁符。等價於 \x0c 和 \cl。

\v匹配乙個垂直製表符。等價於 \x0b 和 \ck。

\n匹配乙個換行符。等價於 \x0a 和 \cj。

\r匹配乙個回車符。等價於 \x0d 和 \cm。

\p匹配 cr/lf (等同於 \r\n),用來匹配 dos 行終止符

\d匹配任意數字,等價於 [0-9].

\d匹配任意非數字, [^0-9]

\a匹配字串開始

\z匹配字串結束,如果存在換行,只匹配到換行前的結束字串。

\z匹配字串結束

\g匹配最後匹配完成的位置。

\b匹配乙個單詞邊界,也就是指單詞和空格間的位置。例如,『er\b』 可以匹配"never" 中的 『er』,但不能匹配 「verb」 中的 『er』。

\b匹配非單詞邊界。『er\b』 能匹配 「verb」 中的 『er』,但不能匹配 「never」 中的 『er』。

標誌描述

i忽略大小寫

g全域性搜尋

m多行的: 錨點元字元 ^ $ 工作範圍在每行的起始.

貪婪模式

「/(.*at)/」 => the fat cat sat on the mat.

惰性匹配

「/(.*?at)/」 =>the fat cat sat on the mat.

python從1.5模組起增加了re模組,他使python語言擁有全部的正規表示式功能

re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none。

引數描述

pattern

匹配的正規表示式

string

要匹配的字串

flags

標誌位,用於控制正規表示式的匹配方式

如果匹配成功,re.match()會返回乙個匹配的物件,否則返回none。我們可以使用group(num)或groups()來獲取匹配表示式

匹配物件方法

描述group(num=0)

匹配的整個表示式的字串,group() 可以一次輸入多個組號,在這種情況下它將返回乙個包含那些組所對應值的元組。

groups()

返回乙個包含所有小組字串的元組,從 1 到 所含的小組號。

group()返回被匹配的字串

import re

line =

"cats are smarter than dogs"

matchobj = re.match( r'(.*) are (.*?) .*'

, line, re.m|re.i)

print

(matchobj.group(1,

2))# ('cats', 'smarter')

re.search 掃瞄整個字串並返回第乙個成功的匹配。re.search()與re.match()引數類似,返回物件相同。re.search()掃瞄整個字串,而re.match()只能從字串起始位置匹配

re.sub用於替換字串中的匹配項

compile函式用於編譯正規表示式,生成乙個正規表示式( pattern )物件,供 match() 和 search() 這兩個函式使用。

修飾符描述

re.i

使匹配對大小寫不敏感

re.l

做本地化識別(locale-aware)匹配

re.m

多行匹配,影響 ^ 和 $

re.s

使 . 匹配包括換行在內的所有字元

re.u

根據unicode字符集解析字元。這個標誌影響 \w, \w, \b, \b.

re.x

該標誌通過給予你更靈活的格式以便你將正規表示式寫得更易於理解

在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的,則返回空列表。 match 和 search 是匹配一次 findall 匹配所有。

和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並把它們作為乙個迭代器返回。

split方法按照能夠匹配的子串將字串分割後返回列表

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...