python正则判断_Python 正则表达式
一、基礎(chǔ)語法
1.1 語法速查
1.2 最簡(jiǎn)單的正則匹配
學(xué)習(xí)正則一般是從 match 和 search 函數(shù)開始,推薦教程。
match
match(pattern, string) 函數(shù)會(huì)從字符串的頭部開始搜索,如果匹配到了 pattern 則將其結(jié)果存入 group 中,匹配到了幾次就存入幾次,如果沒有匹配到則返回空。
import re
a = "Jack love Rose"
res = re.match(r"Jack", a)
if res:
print(res.group(0))
輸出結(jié)果
Jack
search
如果想在句子中匹配某個(gè)單詞應(yīng)該使用 search() 函數(shù),使用match() 函數(shù)是搜索不到的
import re
a = "Jack love coding!"
res1 = re.match(r"love", a)
res2 = re.search(r"love", a)
if res1:
print(res1.group(0))
if res2:
print(res2.group(0))
輸出結(jié)果
love
如果匹配了多個(gè)結(jié)果,那么同樣的,輸出 group(2)、group(3)……
import re
a = "Jack love Rose and love coding!"
res = re.search(r"Jack (.*) and (.*) coding!", a)
if res:
print(res.group(1))
print(res.group(2))
輸出結(jié)果
love Rose
love
match 和 search 函數(shù)適合于本身已經(jīng)知道了有幾個(gè)需要匹配項(xiàng)的情況,如果需要找出所有的匹配項(xiàng),應(yīng)該使用 findall,后面會(huì)講到。
compile
函數(shù)聲明
re.compile(pattern[, flags])
flags 是一個(gè)可選參數(shù),表示匹配模式,比如忽略大小寫,多行模式等,具體參數(shù)為:
我們來嘗試一下
import re
a = "Jack love Rose and love coding!"
# 忽略大小寫
pattern = re.compile(r"JACK (.*) AND (.*) coding!", re.I)
res = pattern.match(a)
if res:
print(res.group(1))
print(res.group(2))
輸出結(jié)果
love Rose
love
findall
在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次, findall 匹配所有。
import re
pattern = re.compile(r'\d+') # 查找數(shù)字
result1 = pattern.findall('www.hao123baidu456.com')
result2 = pattern.findall('www.hao123baidu456.com', 0, 10) # 指定匹配范圍
print(result1)
print(result2)
輸出結(jié)果
['123', '456']
['123']
1.3 轉(zhuǎn)義字符匹配
轉(zhuǎn)義字符的匹配需要 "\" 做轉(zhuǎn)義。匹配括號(hào)
import re
# 匹配括號(hào)里的內(nèi)容
a = "www.hao123(baidu)456.com"
# 忽略大小寫
pattern = re.compile(r"\((.*)\)")
res = pattern.findall(a)
print(res[0])
輸出內(nèi)容
baidu匹配$
$是一個(gè)特殊的字符,在正則中表示以某字符結(jié)尾,假設(shè)我們要匹配 $$ 中間的內(nèi)容(經(jīng)常在公式轉(zhuǎn)換中使用),應(yīng)該怎么寫呢?
import re
a = "$y=x^2$"
# 匹配$$中間的內(nèi)容
pattern = re.compile(r"\$(.*)\$")
res = pattern.findall(a)
print(res[0])
輸出結(jié)果
y=x^2
其他的轉(zhuǎn)義字符使用方式類似。
1.4 正則替換
Python 的re模塊提供了re.sub用于替換字符串中的匹配項(xiàng)。函數(shù)聲明如下
re.sub(pattern, repl, string, count=0, flags=0)【例 1】將字符串中的 s 替換為 A
import re
a = "this is hust"
pattern = re.compile(r"s")
res = re.sub(pattern, "A", a)
print(res)
輸出結(jié)果
thiA iA huAt【例 2】將字符串中的 $A$ 替換為 `$A$`
import re
# replace $A$ to `$A$`
a = "設(shè)集合$a={1,2,3}$,求集合$a$的子集個(gè)數(shù)。"
b = re.sub(r'\$(.+?)\$', r'`$\1$`', a)
print(a)
print(b)
輸出結(jié)果
設(shè)集合$a={1,2,3}$,求集合$a$的子集個(gè)數(shù)。
設(shè)集合`$a={1,2,3}$`,求集合`$a$`的子集個(gè)數(shù)。
這里有個(gè)注意的點(diǎn), \1 表示匹配到的內(nèi)容。【例 2】將字符串中的無效,測(cè)試替換為空字符
import re
a = "華中科技大學(xué)機(jī)械學(xué)院(無效)"
b = "華中科技大學(xué)紫菘公寓(測(cè)試)"
c = "華中科技大學(xué)無效紫菘測(cè)試公寓(西區(qū))"
pattern = re.compile(u"(無效|測(cè)試)")
res1 = re.sub(pattern, "", a)
res2 = re.sub(pattern, "", b)
res3 = re.sub(pattern, "", c)
print(res1)
print(res2)
print(res3)
輸出結(jié)果
華中科技大學(xué)機(jī)械學(xué)院()
華中科技大學(xué)紫菘公寓()
華中科技大學(xué)紫菘公寓(西區(qū))
二、進(jìn)階用法
2.1 判斷字符串是否為數(shù)字
import re
a = "-1234"
b = "-12.34"
c = ".34"
print(re.match(r'^[+-]?\d+$', a)) # 匹配int 1
print(re.match(r'^[+-]?[0-9].*$', a)) # 匹配int 2
print(re.match(r'^[+-]?\d*(\.)\d+$', b)) # 匹配float
print(re.match(r'^[+-]?\d*(\.)\d+$', c)) # 匹配float
print(re.match(r'^[+-]?\d*(\.)?\d+$', a)) # 匹配int 或 float
輸出結(jié)果
2.2 去除括號(hào)中的內(nèi)容
去除括號(hào)里的內(nèi)容其實(shí)就是利用 re.sub 的替換功能
import re
a = "華中科技大學(xué)附屬同濟(jì)醫(yī)院(西區(qū))"
pattern = re.compile(u"\$(.*)\$")
res = re.sub(pattern, "", a)
print(res)
輸出結(jié)果
華中科技大學(xué)附屬同濟(jì)醫(yī)院
2.3 去除臟符號(hào)【例 1】因?yàn)槠綍r(shí)工作中接觸數(shù)據(jù)很多,經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行清洗,其中一個(gè)很重要的流程就是去除字符串中除了中文、英文、括號(hào)之外的所有字符,這個(gè)實(shí)現(xiàn)如下
import re
a = "華中科技大學(xué)機(jī)械學(xué)院 B240 (研究生工作室;電話聯(lián)系)。"
pattern = re.compile(u"[^\u4e00-\u9fa50-9a-zA-Z()()]")
res = re.sub(pattern, "", a)
print(res)
輸出結(jié)果
華中科技大學(xué)機(jī)械學(xué)院B240(研究生工作室電話聯(lián)系)【例 2】括號(hào)內(nèi)不是期或者區(qū)則刪掉括號(hào)內(nèi)容
import re
a = "華中科技大學(xué)紫菘公寓(一期)。"
b = "華中科技大學(xué)紫菘公寓(西)。"
pattern = re.compile(u"\((?!.*[區(qū)期]).*\)|\((?!.*[區(qū)期]).*\)")
res1 = re.sub(pattern, "", a)
res2 = re.sub(pattern, "", b)
print(res1)
print(res2)
輸出結(jié)果
華中科技大學(xué)紫菘公寓(一期)。
華中科技大學(xué)紫菘公寓。
總結(jié)
以上是生活随笔為你收集整理的python正则判断_Python 正则表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 附息国债风险大吗?我们这样理解!
- 下一篇: 给宝宝存钱怎样存好?给孩子存钱的技巧