正規表示式初步學習

2021-09-25 21:04:37 字數 3958 閱讀 7778

正規表示式,又稱規則表示式**。**(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。

使用場景

在python中使用正則需要匯入re

import re
首先我們來看兩個例子來體驗一下正規表示式的威力吧:

比如,已知乙個列表:

​ li = [「chinese」, 「china」, 「english」, 「britain」, 「canada」, 「new zealand」]

找出以ch開頭的字串。

# 法1

li =

["chinese"

,"china"

,"english"

,"britain"

,"canada"

,"new zealand"

]lt =

for i in li:

if i[0:

2]=="ch"

:print

(lt)

# 法2

li =

["chinese"

,"china"

,"english"

,"britain"

,"canada"

,"new zealand"

]print

([i for i in li if i[0:

2]=="ch"

])

正規表示式

import re

sr =

'abc23ad56dff8as99'

m = r'[0-9]+'

num = re.findall(m, sr)

print

(num)

['23'

,'56'

,'8'

,'99'

]

簡單的字串篩選列子:

sr =

'hello world 18111234589name:張三,tel:18711001111

'start = sr.find('')

end = sr.rfind('')

print

(sr[start+

len('')

:end]

)

當嚴格討論與字串中模式相關的正規表示式時,我們會用術語「匹配」(matching),指的是術語「模式匹配」(pattern-matching)。在python 術語中,主要有兩種方法完成模式匹配:「搜尋」(searching),即在字串任意部分中搜尋匹配的模式;而「匹配」(matching)是指判斷乙個字串能否從起始處全部或者部分地匹配某個模式。搜尋通過search()函式或方法來實現,而匹配通過呼叫match()函式或方法實現。總之,當涉及模式時,全部使用術語「匹配」;我們按照python如何完成模式匹配的方式來區分「搜尋」和「匹配」。

字元功能

.匹配任意乙個字元(除了\n)

匹配中列舉的字元

\d匹配數字(0-9)

\d匹配非數字(\d的取反)

\w匹配字元,a-z,a-z,0-9, _

\w\w取反

\s匹配空白字元,比如\tab

\s匹配非空白字元,\s取反

[^abc]

匹配abc以外的所有字元

引數說明:

re.group([group1,…]) 字串或者元組

regroups([空]) tuple

字元功能.

匹配任意乙個字元(除了\n)

匹配中列舉的字元

\d匹配數字(0-9)

\d匹配非數字(\d的取反)

\w匹配字元,a-z,a-z,0-9, _

\w\w取反

\s匹配空白字元,比如\tab

\s匹配非空白字元,\s取反

demo:

import re

m = re.match(

'[aa]'

,'asd'

)# [內 列舉]

print

(m.group())

# a

m = re.match(

'[aa]'

,'asd'

)# [內 列舉]

print

(m.group())

# a

m = re.match(

'.',

'bsd'

)# 除了\n都行

print

(m.group())

# b

m = re.match(

'a',

'bsd'

)print

(m.group())

#報錯 第乙個不是a

m = re.match(

'.',

'\n'

)print

(m.group())

#報錯 , '.'不能匹配 \n

m = re.match(

'[0123456789]'

,'6789bsd'

)print

(m.group())

#6m = re.match(

'[0-9]'

,'6789bsd'

)print

(m.group())

#6m = re.match(

'\d'

,'6789bsd'

)print

(m.group())

#6m = re.match(

'\d'

,'bsd'

)#非數字

print

(m.group())

# b

m = re.match(

'\w'

,'a666bsd'

)#字元 _ 英文本母 數字

print

(m.group())

# am = re.match(

'\w'

,'\n666bsd'

)#\w取反

print

(m.group())

# \n

m = re.match(

'\s'

,'\n666bsd'

)#空白

print

(m.group(

))

m = re.match(

'\s'

,'666bsd'

)#非空白

print

(m.group())

# 6

字元功能*

匹配前乙個字元出現0次多次或者無限次,可有可無可多可少

+匹配前乙個字元出現1次多次無限次,直到出現1次

?匹配前乙個字元出現1次或者0次,要麼一次要麼沒有

匹配前乙個字元出現m次

匹配前乙個字元至少出現m次

匹配前乙個字元出現m到n次

字元功能

^匹配字串開頭

$匹配字串結尾

\b匹配乙個單詞的邊界 boundary

\b匹配非單詞邊界

字元功能

|匹配左右任意乙個表示式

(ab)

將括號內的字元作為乙個分組

\num

引用分組num匹配到的字串

(?p)

分組起別名

(?p=name)

引用別名為name分組匹配到的字串

re.findall(pattern, string, flags=0)

re.finditer(pattern, string, flags=0)

re.match()和re.search()的區別

正規表示式初步

正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配,python 自1.5版本起增加了re 模組,它提供 perl 風格的正規表示式模式。compile 函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。1 基本常用的...

MySQL正規表示式初步

你還可以學習 mysql學習精粹 我們知道,在sql之中,可以用 like 這個謂詞 表示式 來進行模糊檢索,並支援 等佔位符.但是,這個模糊檢索的功能有很多限制,簡單來說就是太模糊了。在mysql中提供了 regexp 關鍵字來支援正規表示式,當然,只是一些很簡單的正則啦。首先,我們構造一些測試資...

正規表示式學習之初步案例

c d r s 說明 姓氏以c d r或s開頭 0 1 2 3 4 5 6 7 8 9 說明 匹配數字0 9 d說明 元字元表示數字0 9 d d d 說明 會匹配012 234 345 999 abc 0 9 說明 表示匹配乙個大寫的a。如果匹配成功,嘗試匹配乙個大寫的b。如果匹配成功,嘗試匹配乙...