正規表示式,又稱規則表示式**。**(英語: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。如果匹配成功,嘗試匹配乙...