在Python中,正則表達(dá)式是一種用于匹配和操作字符串的強(qiáng)大工具。正則表達(dá)式由一系列字符和特殊字符組成,用于定義搜索模式。
在Python中,我們使用內(nèi)置的 re
模塊來操作正則表達(dá)式。要使用正則表達(dá)式,我們首先需要導(dǎo)入 re
模塊。
下面是一些常用的正則表達(dá)式的定義:
.
:匹配任意字符(除了換行符)。\d
:匹配任意一個(gè)數(shù)字字符。\D
:匹配任意一個(gè)非數(shù)字字符。\w
:匹配任意一個(gè)字母數(shù)字字符(包括下劃線)。\W
:匹配任意一個(gè)非字母數(shù)字字符。\s
:匹配任意一個(gè)空白字符(包括空格、制表符、換行符等)。\S
:匹配任意一個(gè)非空白字符。[]
:定義字符集,可以匹配其中的任意一個(gè)字符。例如,[abc]
匹配字符a
、b
或c
。[^]
:在字符集中的開頭使用^
,表示取反。例如,[^abc]
匹配除了字符a
、b
和c
之外的任意一個(gè)字符。*
:匹配前一個(gè)字符的零個(gè)或多個(gè)出現(xiàn)。例如,a*
匹配零個(gè)或多個(gè)字符a
。+
:匹配前一個(gè)字符的一個(gè)或多個(gè)出現(xiàn)。例如,a+
匹配一個(gè)或多個(gè)字符a
。?
:匹配前一個(gè)字符的零個(gè)或一個(gè)出現(xiàn)。例如,a?
匹配零個(gè)或一個(gè)字符a
。{n}
:匹配前一個(gè)字符的 n 個(gè)出現(xiàn)。例如,a{3}
匹配連續(xù)出現(xiàn)三個(gè)字符a
。{m,n}
:匹配前一個(gè)字符的 m 到 n 個(gè)出現(xiàn)。例如,a{2,4}
匹配連續(xù)出現(xiàn)兩個(gè)到四個(gè)字符a
。()
:定義分組,用于對(duì)匹配的字符進(jìn)行分組或提取。
案例分析
一個(gè)文本文件里面存儲(chǔ)了 一些市場職位信息,格式如下所示
Python3?高級(jí)開發(fā)工程師?上?;ソ探逃萍加邢薰旧虾?浦東新區(qū)2萬/月02-18滿員
測試開發(fā)工程師(C++/python)?上海墨鹍數(shù)碼科技有限公司上海-浦東新區(qū)2.5萬/每月02-18未滿員
Python3?開發(fā)工程師?上海德拓信息技術(shù)股份有限公司上海-徐匯區(qū)1.3萬/每月02-18剩余11人
測試開發(fā)工程師(Python)?赫里普(上海)信息科技有限公司上海-浦東新區(qū)1.1萬/每月02-18剩余5人
Python高級(jí)開發(fā)工程師?上海行動(dòng)教育科技股份有限公司上海-閔行區(qū)2.8萬/月02-18剩余255人
python開發(fā)工程師?上海優(yōu)似騰軟件開發(fā)有限公司上海-浦東新區(qū)2.5萬/每月02-18滿員
現(xiàn)在,我們需要寫一個(gè)程序,從這些文本里面抓取所有職位的薪資。
要獲取這樣的結(jié)果

怎么做?大家先自己思考一下。
這是典型的字符串處理。分析這里面的規(guī)律,可以發(fā)現(xiàn),薪資的數(shù)字后面都有關(guān)鍵字 萬/月 或者 萬/每月,根據(jù)我們學(xué)過的知識(shí),我們不難寫出下面的代碼
content?=?'''
Python3?高級(jí)開發(fā)工程師?上海互教教育科技有限公司上海-浦東新區(qū)2萬/月02-18滿員
測試開發(fā)工程師(C++/python)?上海墨鹍數(shù)碼科技有限公司上海-浦東新區(qū)2.5萬/每月02-18未滿員
Python3?開發(fā)工程師?上海德拓信息技術(shù)股份有限公司上海-徐匯區(qū)1.3萬/每月02-18剩余11人
測試開發(fā)工程師(Python)?赫里普(上海)信息科技有限公司上海-浦東新區(qū)1.1萬/每月02-18剩余5人
Python高級(jí)開發(fā)工程師?上海行動(dòng)教育科技股份有限公司上海-閔行區(qū)2.8萬/月02-18剩余255人
python開發(fā)工程師?上海優(yōu)似騰軟件開發(fā)有限公司上海-浦東新區(qū)2.5萬/每月02-18滿員
'''
#?將文本內(nèi)容按行放入列表
lines?=?content.splitlines()
for?line?in?lines:
????#?查找'萬/月'?在?字符串中什么地方
????pos2?=?line.find('萬/月')
????if?pos2?<?0:
????????#?查找'萬/每月'?在?字符串中什么地方
????????pos2?=?line.find('萬/每月')
????????#?都找不到
????????if?pos2?<?0:?
????????????continue
????#?執(zhí)行到這里,說明可以找到薪資關(guān)鍵字
????#?接下來分析?薪資?數(shù)字的起始位置
????#?方法是?找到?pos2?前面薪資數(shù)字開始的位置
????idx?=?pos2-1
????#?只要是數(shù)字或者小數(shù)點(diǎn),就繼續(xù)往前面找
????while?line[idx].isdigit()?or?line[idx]=='.':
????????idx?-=?1
????#?現(xiàn)在?idx?指向?薪資數(shù)字前面的那個(gè)字,
????#?所以薪資開始的?索引?就是?idx+1
????pos1?=?idx?+?1
????print(line[pos1:pos2])
運(yùn)行一下,發(fā)現(xiàn)完全可以。在你高興完之后,我們?cè)倏纯磳懙拇a。怎么樣?
太麻煩了,是不是。為了從每行獲取薪資對(duì)應(yīng)的數(shù)字,我們可是寫了不少行代碼。這種從字符串中搜索出某種特征的子串有沒有更簡單的方法呢?
解決方案就是我們今天要介紹的 正則表達(dá)式 。
如果我們使用正則表達(dá)式,代碼可以這樣
content?=?'''
Python3?高級(jí)開發(fā)工程師?上海互教教育科技有限公司上海-浦東新區(qū)2萬/月02-18滿員
測試開發(fā)工程師(C++/python)?上海墨鹍數(shù)碼科技有限公司上海-浦東新區(qū)2.5萬/每月02-18未滿員
Python3?開發(fā)工程師?上海德拓信息技術(shù)股份有限公司上海-徐匯區(qū)1.3萬/每月02-18剩余11人
測試開發(fā)工程師(Python)?赫里普(上海)信息科技有限公司上海-浦東新區(qū)1.1萬/每月02-18剩余5人
Python高級(jí)開發(fā)工程師?上海行動(dòng)教育科技股份有限公司上海-閔行區(qū)2.8萬/月02-18剩余255人
python開發(fā)工程師?上海優(yōu)似騰軟件開發(fā)有限公司上海-浦東新區(qū)2.5萬/每月02-18滿員
'''
import?re
for?one?in??re.findall(r'([\d.]+)萬/每{0,1}月',?content):
????print(one)
運(yùn)行一下看看,結(jié)果是一樣的。但是代碼卻簡單多了。
正則表達(dá)式,是一種語法,用來描述你想搜索的字符串的特征。
這里指定了一個(gè)正則表達(dá)式
re.findall(r'([\d.]+)萬/每{0,1}月', content)([\d.]+)萬/每{0,1}月,就是正則表達(dá)式字符串,指定了搜索子串的特征。
為什么這么寫?我們后面再介紹。
findall函數(shù)返回所有匹配的子串,放在一個(gè)列表中。
從上面的例子可以看出,用正則表達(dá)式關(guān)鍵的地方在于,如何寫出正確的表達(dá)式語法。
正則表達(dá)式非常強(qiáng)大,語法非常復(fù)雜,如果你英文閱讀能力還可以,那太好了,點(diǎn)擊這里:https://docs.python.org/3/howto/regex.html,參考Python官方文檔里面的描述。具體的使用細(xì)節(jié)包括語法都在里面。
本教程會(huì)繼續(xù)給大家介紹一些常見的正則表達(dá)式語法。文章來源:http://www.zghlxwxcb.cn/news/detail-828797.html
想在線Python編程的,快從小蜜蜂網(wǎng)站:http://zglg.work 注冊(cè)登錄體驗(yàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-828797.html

到了這里,關(guān)于Python中的正則表達(dá)式(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!