日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python正则判断_Python 正则表达式

發(fā)布時間:2023/12/10 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python正则判断_Python 正则表达式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、基礎(chǔ)語法

1.1 語法速查

1.2 最簡單的正則匹配

學(xué)習(xí)正則一般是從 match 和 search 函數(shù)開始,推薦教程。

match

match(pattern, string) 函數(shù)會從字符串的頭部開始搜索,如果匹配到了 pattern 則將其結(jié)果存入 group 中,匹配到了幾次就存入幾次,如果沒有匹配到則返回空。

import re

a = "Jack love Rose"

res = re.match(r"Jack", a)

if res:

print(res.group(0))

輸出結(jié)果

Jack

search

如果想在句子中匹配某個單詞應(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

如果匹配了多個結(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)知道了有幾個需要匹配項的情況,如果需要找出所有的匹配項,應(yīng)該使用 findall,后面會講到。

compile

函數(shù)聲明

re.compile(pattern[, flags])

flags 是一個可選參數(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á)式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。

注意: 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)義。匹配括號

import re

# 匹配括號里的內(nèi)容

a = "www.hao123(baidu)456.com"

# 忽略大小寫

pattern = re.compile(r"\((.*)\)")

res = pattern.findall(a)

print(res[0])

輸出內(nèi)容

baidu匹配$

$是一個特殊的字符,在正則中表示以某字符結(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用于替換字符串中的匹配項。函數(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$的子集個數(shù)。"

b = re.sub(r'\$(.+?)\$', r'`$\1$`', a)

print(a)

print(b)

輸出結(jié)果

設(shè)集合$a={1,2,3}$,求集合$a$的子集個數(shù)。

設(shè)集合`$a={1,2,3}$`,求集合`$a$`的子集個數(shù)。

這里有個注意的點(diǎn), \1 表示匹配到的內(nèi)容。【例 2】將字符串中的無效,測試替換為空字符

import re

a = "華中科技大學(xué)機(jī)械學(xué)院(無效)"

b = "華中科技大學(xué)紫菘公寓(測試)"

c = "華中科技大學(xué)無效紫菘測試公寓(西區(qū))"

pattern = re.compile(u"(無效|測試)")

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 去除括號中的內(nèi)容

去除括號里的內(nèi)容其實就是利用 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 去除臟符號【例 1】因為平時工作中接觸數(shù)據(jù)很多,經(jīng)常需要對數(shù)據(jù)進(jìn)行清洗,其中一個很重要的流程就是去除字符串中除了中文、英文、括號之外的所有字符,這個實現(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】括號內(nèi)不是期或者區(qū)則刪掉括號內(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 正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。