正規表示式

2021-10-01 03:33:03 字數 4921 閱讀 8938

英文半形字元,匹配時只匹配與自身相同的乙個字元

元字元:表示一些特殊的含義,一般不是指具體字元

表示式匹配

.匹配除換行符\n以外的任意乙個字元

|邏輯或操作符

匹配字符集中的乙個字元

[^]對字符集求反,尖號必須在方括號裡的最前面

-定義裡的乙個字元區間,例如[a-z]

\對緊跟其後的乙個字元進行轉義

()對表示式進行分組,將圓括號內的內容當做乙個整體,並獲得匹配的值

轉義字元:具有特殊功能的字元

表示式匹配

\r,\n匹配回車和換行符

\t匹配製表符

\\匹配斜槓\

\^匹配^符號

\.匹配小數點.

表示式匹配

對等字元

\d匹配任意乙個數字

[0-9]

\d\d的反集,即非數字的任意乙個字元

[^\d]

\w匹配任意乙個字母或數字或下劃線

[a-za-z0-9_]

\w\w的反集

[^\w]

\s匹配空格、製表符、換頁符等空白字元的其中任意乙個

[\t\n\x0b\f\r]

\s\s的反集

[^\s]

表示式匹配

表示式重複n次

表示式至少重複m次,最多重複n次

表示式至少重複m次

?匹配表示式0次或者1次,相當於

+表示式至少出現1次,相當於

*表示式出現0次到任意次,相當於

表示式匹配

^在字串開始的地方匹配,符號本身不匹配任何字元

$在字串結束的地方匹配,符號本身不匹配任何字元

\b匹配乙個單詞邊界,也就是單詞和空格之間的位置,符號本身不匹配任何字元

\b匹配非單詞邊界,即左右兩邊都是\w範圍或者左右兩邊都不是\w範圍時的字元縫隙

貪婪模式:.*

非貪婪模式:.*?

功能表示式

匹配中文字元

[\u4e00-\u9fa5]

英文和數字

[a-za-z0-9]+$

匹配**

[a-za-z]+://[^\s]*

日期格式

\d-\d-\d

qq 號

[1-9][0-9]

flag

描述re.s

使.這個萬用字元能夠匹配包括換行在內的所有字元,針對多行匹配

re.i

使匹配對大小寫不敏感

re.a

ascii字元模式

re.l

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

re.m

多行匹配,影響^$

re.u

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

re.x

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

match(pattern, string, flags=0)

pattern:正規表示式

string:要匹配的字串

flags:修飾符

在給定字串的開頭(必須從開頭開始)進行匹配,如果匹配不成功則返回none,匹配成功返回乙個匹配物件, 忽略後面,直接返回不再查詢 ,這個物件有個group()方法,可以將匹配到的字串給出

import re

s ='hello world 123 456 world'

res1 = re.match(

'w.*?d'

, s)

print

(res1)

# none

res2 = re.match(

'he.*?o'

, s)

print

(res2)

# print

(res2.group())

# hello

print

(res2.span())

# (0, 5)

print

(res2.start())

# 0print

(res2.end())

# 5

search(pattern, string, flags=0)

在文字內查詢,返回第乙個匹配到的字串,它的返回值型別和使用方法與match()是一樣的,唯一的區別就是查詢的位置不用固定在文字的開頭

import re

s ='hello world 123 456 world'

res = re.search(

'w.*?d'

, s)

print

(res)

# print

(res.group())

# world

print

(res.span())

# (6, 11)

print

(res.start())

# 6print

(res.end())

# 11

findall(pattern, string, flags=0)

全文查詢,它的返回值是乙個匹配到的字串的列表,沒有group()方法,沒有start、end、span,更不是乙個匹配物件,如果一項都沒有匹配到那麼返回乙個空列表

import re

s ='hello world 123 456 world'

res = re.findall(

'w.*?d'

, s)

print

(res)

# ['world', 'world']

print

(res[0]

)# world

sub(pattern, repl, string, count=0, flags=0)

pattern:想要替換的字串

repl:替換成的字串

string:要匹配的字串

count:替換的次數

flags:修飾符

類似字串的replace()方法,用指定的內容替換匹配到的字元,可以指定替換次數

import re

s ="i am jack!i like swiming!"

res = re.sub(r"i"

,"i"

, s,2)

print

(res)

# i am jack!i like swiming!

高階功能——「分組引用」

import re

s ="hello,world!"

res = re.sub(r"(world)"

, r"\1"

, s)

# 注意括號和\1的作用!

print

(res)

# hello,world!

compile(pattern, flags=0)

re模組的工廠方法,用於將字串形式的正規表示式編譯為pattern模式物件,可以實現更高效率的匹配

import re

s1 =

"2019-6-6 12:00"

s2 =

"2019-6-7 21:12"

pattern = re.

compile

('\d:\d'

)res1 = re.sub(pattern,

'', s1)

res2 = re.sub(pattern,

'', s2)

print

(res1,res2)

# 2019-6-6 2019-6-7

split(pattern, string, maxsplit=0, flags=0)

pattern:被去除的部分的正規表示式

string:要匹配的字串

maxsplit:分割的次數

re模組的split()方法和字串的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正規表示式 編寫正規表示式

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