Python學(xué)習(xí)筆記08-正則表達式

正則表達式(Regular Expression,在代碼中常簡寫為regex、regexp或RE),是計算機科學(xué)的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規(guī)則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些匹配某個模式的文本。

在Python中需要通過正則表達式對字符串進行匹配的時候,可以使用re模塊。

re模塊

# re.match(正則表達式,要匹配的字符串)
  • re.match是用來進行正則匹配檢查的方法,若字符串匹配正則表達式,則match方法返回匹配對象(Match Object),否則返回None(注意不是空字符串"")。
  • 匹配對象Macth Object具有g(shù)roup方法,用來返回字符串的匹配部分。
# re.match() 能夠匹配出以xxx開頭的字符串
result = re.match('hello','helloworld')
# 使用match方法進行匹配操作
# 如果上一步匹配到數(shù)據(jù)的話,可以使用group方法來提取數(shù)據(jù)
print(result.group())

匹配單字符

字符 功能
. 匹配任意1個字符(除了\n)
[ ] 匹配[ ]中列舉的字符
\d 匹配數(shù)字,即0-9
\D 匹配非數(shù)字,即不是數(shù)字
\s 匹配空白,即 空格,tab鍵
\S 匹配非空白
\w 匹配單詞字符,即a-z、A-Z、0-9、_
\W 匹配非單詞字符

原始字符串

使用原始字符串解決正則表達式需要匹配的文本包含轉(zhuǎn)義字符“\”的問題。原始字符串是在字符串前加上r。

mm = "c:\\a\\b\\c"
ret = re.match(r"c:\\a",mm).group()
print(ret)

匹配多個字符

字符 功能
* 匹配前一個字符出現(xiàn)0次或者無限次,即可有可無
+ 匹配前一個字符出現(xiàn)1次或者無限次,即至少有1次
? 匹配前一個字符出現(xiàn)1次或者0次,即要么有1次,要么沒有
{m} 匹配前一個字符出現(xiàn)m次
{m,} 匹配前一個字符至少出現(xiàn)m次
{m,n} 匹配前一個字符出現(xiàn)從m到n次

示例

[A-Z][a-z]* 匹配首字母大寫后面都是小寫字母并且這些小寫字母可有可無 
[a-zA-Z_]+[\w_]* 匹配變量名是否有效
[1-9]?[0-9] 匹配0到99之間的數(shù)字
[a-zA-Z0-9_]{8,20} 匹配8到20位的密碼,可以是大小寫英文字母、數(shù)字、下劃線

匹配邊界

字符 功能
^ 匹配字符串開頭
$ 匹配字符串結(jié)尾
\b 匹配一個單詞的邊界
\B 匹配非單詞邊界

匹配分組

字符 功能
匹配左右任意一個表達式
(ab) 將括號中字符作為一個分組
\num 引用分組num匹配到的字符串
(?P<name>) 分組起別名
(?P=name) 引用別名為name分組匹配到的字符串

re模塊中常用函數(shù)

函數(shù) 說明
compile() 根據(jù)包含正則表達式的字符串創(chuàng)建模式對象
search() 在字符串中尋找模式
match() 在字符串的開始處匹配模式
split() 根據(jù)模式的匹配項來分割字符串
findall() 列出字符串中模式的所有匹配項
sub(pat,repl,string[,count=0]) 將字符串中的所有pat的匹配項用repl替換
escape() 將字符串中所有特殊正則表達式字符轉(zhuǎn)義
import re

pat = r'\d+'
string = '人民幣100萬'
print(re.search(pat, string).group())
if re.search(pat, string):
    print('found it')

some_text = 'alpha.beta...game'
print(re.split('[.]+', some_text))

pat1 = '[a-zA-Z]+'
text = 'Hm...are you sure?'
print(re.findall(pat1, text))

pat2 = '{name}'
text1 = 'Dear {name}...'
print(re.sub(pat2, 'xiaoli',text1))

print(re.escape('www.python.org'))
print(re.escape('hello world'))

結(jié)果

100
found it
['alpha', 'beta', 'game']
['Hm', 'are', 'you', 'sure']
Dear xiaoli...
www\.python\.org
hello\ world
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容