Python 正則 re.compile 真的必需嗎
背景:我在爬蟲(chóng)處理某個(gè)文本時(shí),用到了re.findall(),而不是re.compile。遠(yuǎn)在新加坡的同事提出了質(zhì)疑,認(rèn)為以我的水平,不應(yīng)該寫(xiě)出這樣影響性能的代碼,讓我優(yōu)化一下。我提出了反駁:既然使用了Python,就不應(yīng)該太過(guò)考慮性能的問(wèn)題,如果要考慮性能就使用C語(yǔ)言,而不是Python.他接著說(shuō):正是因?yàn)閜ython性能不夠,所以更應(yīng)該考慮代碼的優(yōu)化,能做好就應(yīng)該做到最好.最后,我沒(méi)有回話,當(dāng)然我也沒(méi)有進(jìn)行所謂的優(yōu)化,以下我會(huì)給出我自己的觀點(diǎn).
re.compile()、re.findall()、re.search() 的作用與區(qū)別
1、re.compile()
Python里的re是支持正則表達(dá)式的模塊,所謂的正則表達(dá)式就是匹配文本里符合條件的語(yǔ)句. re.compile()是根據(jù)包含正則表達(dá)式的字符串創(chuàng)建模式對(duì)象,以提高匹配效率.例如:
def test():
regex = r'(\d+) years old'
content = 'Alex is a 7 years old boy.'
reg = re.compile(regex)
result = re.search(reg, content).group()
print(result)
result = 7
2、re.search()
re.search()是在字符串開(kāi)啟查找模式,如其名:search.例如:
def test():
content = 'Alex is a 7 years old boy.'
result = re.search(r'(\d+) years old', content).group()
print(result)
result = 7
3、re.findall()
re.findall()是返回一個(gè)列表,列表里包含了所有符合條件的結(jié)果,例如:
def test():
content = 'Alex is a 7 years old boy.Bob is a 12 years old boy...'
result = re.findall(r'(\d+) years old', content)
print(result)
result = ['7', '12']
我們分歧在他認(rèn)為我應(yīng)該先用 re.complile 編譯好正則之后,再匹配,正如我在re.compile舉得例子. 你會(huì)說(shuō)他說(shuō)的沒(méi)錯(cuò)啊,作者不應(yīng)該順從同事這個(gè)合理的要求,不改就算了還要在這里發(fā)文BB.我想說(shuō)的是 拋開(kāi)劑量談毒性,都是耍流氓。對(duì)于數(shù)據(jù)來(lái)說(shuō)拋開(kāi)量級(jí)談性能差異,都是耍流氓. 如果要處理的 文本是百萬(wàn)、千萬(wàn)、億這個(gè)級(jí)別,我會(huì)做優(yōu)化,但是對(duì)于個(gè)別剛上萬(wàn)的數(shù)據(jù)來(lái)說(shuō),我覺(jué)得沒(méi)必要,業(yè)務(wù)流程真的不缺那0.0X秒,多寫(xiě)一行re.compile的時(shí)間遠(yuǎn)大于提示的時(shí)間了. 做好代碼的優(yōu)化很重要,特別是面對(duì)大量數(shù)據(jù)的時(shí)候,但是我們要想清楚,有時(shí)候并不是靠那幾行re.compile就能提高多大的性能,精簡(jiǎn)流程,合理的設(shè)計(jì)模式才是重點(diǎn). 工作中還是要做好和同事的溝通,不要和我一樣,不然遲早會(huì)被別人唾棄.


根據(jù)下面評(píng)論的提示re.compile()那一行應(yīng)該放在迭代外面的代碼塊里,相比圖中的時(shí)間速度會(huì)有所提升.????.但是我們的業(yè)務(wù)邏輯是和上圖一樣的,而不是在迭代之外.
到此這篇關(guān)于Python 正則 re.compile 真的必需嗎的文章就介紹到這了,更多相關(guān)Python 正則 re.compile內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 10分鐘教你用Python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
- python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
- python itchat實(shí)現(xiàn)微信自動(dòng)回復(fù)的示例代碼
- 利用python微信庫(kù)itchat實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
- python實(shí)現(xiàn)微信小程序自動(dòng)回復(fù)
- python微信公眾號(hào)之關(guān)鍵詞自動(dòng)回復(fù)
- python實(shí)現(xiàn)微信機(jī)器人: 登錄微信、消息接收、自動(dòng)回復(fù)功能
- Python中re.compile函數(shù)的使用方法
- 關(guān)于Python中compile() 函數(shù)簡(jiǎn)單實(shí)用示例詳解
- Python正則表達(dá)式re.compile()和re.findall()詳解
- Python中請(qǐng)不要再用re.compile了
- python內(nèi)置函數(shù)compile(),complex()的使用
相關(guān)文章
Python的collections模塊中的OrderedDict有序字典
字典是無(wú)序的,但是collections的OrderedDict類(lèi)為我們提供了一個(gè)有序的字典結(jié)構(gòu),名副其實(shí)的Ordered+Dict,下面通過(guò)兩個(gè)例子來(lái)簡(jiǎn)單了解下Python的collections模塊中的OrderedDict有序字典:2016-07-07
基于Python?OpenCV和?dlib實(shí)現(xiàn)眨眼檢測(cè)
這篇文章主要介紹了基于Python?OPenCV及dlib實(shí)現(xiàn)檢測(cè)視頻流中的眨眼次數(shù)。文中的代碼對(duì)我們的學(xué)習(xí)和工作有一定價(jià)值,感興趣的同學(xué)可以參考一下2021-12-12
python的多元數(shù)據(jù)類(lèi)型(上)
這篇文章主要為大家詳細(xì)介紹了python的多元數(shù)據(jù)類(lèi)型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Python configparser模塊封裝及構(gòu)造配置文件
這篇文章主要介紹了Python configparser模塊封裝及構(gòu)造配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Python檢查和同步本地時(shí)間(北京時(shí)間)的實(shí)現(xiàn)方法
這篇文章主要介紹了Python檢查和同步本地時(shí)間(北京時(shí)間)的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python 自動(dòng)批量打開(kāi)網(wǎng)頁(yè)的示例
今天小編就為大家分享一篇python 自動(dòng)批量打開(kāi)網(wǎng)頁(yè)的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

