解讀python正則表達式括號問題
python正則表達式括號
python中re庫函數(shù)的簡單用法
re.findall(pattern,string)
- 匹配所有符合正則表達式的字符,返回一個列表
re.search(pattern,string)
- 查找第一個符合正則表達式的字符,返回一個Matcher對象。用group()或groups()方法取值
re.match(pattern,string)
- 查找第一個符合正則表達式的字符,要求完全符合,返回一個Matcher對象。用group()或groups()方法取值
正則表達式中的圓括號()的作用是對字符或元字符分組。
我錯把它的作用認為是將圓括號內(nèi)的字符看成一個整體。
盡管在一些正則測試網(wǎng)站上,進行匹配時,把括號內(nèi)的字符看成一個整體來匹配也能匹配到想要的結(jié)果。測試網(wǎng)站如:regex101等
然而在在寫python程序的時候,會出現(xiàn)不是我想要的結(jié)果。
如果正則表達式中多出使用了圓括號進行分組的話。
在使用findall方法匹配結(jié)果就會只有分組的結(jié)果(即括號內(nèi)表達式匹配的內(nèi)容),而不是整個表達式所匹配的內(nèi)容。
如果使用search方法匹配,對返回的Matcher對象調(diào)用group()方法可以獲取完整的結(jié)果。但是在需要匹配多個結(jié)果時,還得用findall
所以在使用正則表達式時,若像我不太熟悉的話,避免使用圓括號來把一段表達式看成一個整體。
python正則表達式入門教程括號及字符
數(shù)據(jù)分析遇到字符串處理會有兩個階段涉及到正則表達式,一個是在數(shù)據(jù)庫階段一個是Python處理階段。作為一個小白學(xué)習(xí)正則也遇到很多彎路和難理解的點,梳理梳理學(xué)習(xí)的過程。
hive里面正則表達式可以用regexp_extract()在select里進行返回指定要求的內(nèi)容,也可以用regexp在where里進行指定要求的限制條件;
python里面re.findall()或者df.str.extract()(pandas功能);
正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。學(xué)習(xí)正則需要記住兩類知識點加上實際案例的聯(lián)系就能很快的理解和掌握。
正則中語法規(guī)范:
括號區(qū)別
正則表達式中存在(),[],{}
1、():匹配小括號內(nèi)的字符串,可以是一個,也可以是多個,常跟“|”(或)符號搭配使用,是多選結(jié)構(gòu)的。() 是為了提取匹配的字符串。表達式中有幾個()就有幾個相應(yīng)的匹配字符串
例:
string= | ‘我正在學(xué)習(xí)python3的正則表達式,現(xiàn)在的日期是2019-01-22’ |
---|---|
目的 | 給定指定字符串進內(nèi)容進行精準匹配獲取python |
hive | select regexp_extract(string,’(python)’,1) 返回結(jié)果為:python,1代碼返回正則的第幾個括號中的內(nèi)容 |
python | re.findall(’(python)’,string)返回結(jié)果為:python |
2、【】:匹配字符組內(nèi)的字符,比如咱們常用的[0-9a-zA-Z.*?!]等,在[]內(nèi)的字符都是字符,不是元字符,比如“0-9”、“a-z”這中間的“-”就是連接符號,表示范圍的元字符,如果寫成[-!?*(]這樣的話,就是普通字符例:
string= | ‘我正在學(xué)習(xí)python3的正則表達式,現(xiàn)在的日期是2019-01-22’ |
---|---|
目的 | 給定字符進內(nèi)容匹配獲取python |
hive | select regexp_extract(string,’[a-z]’,0) 返回結(jié)果為:python,0代碼返回符合正則的內(nèi)容,如果有小括號可以寫1(如'([a-z]+)') |
python | re.findall(’[a-z]+’,string)返回結(jié)果為:python |
目的 | 給定字符進內(nèi)容匹配獲取日期2019-01-22 |
hive | select regexp_extract(string,’([0-9]+.[0-9]+.[0-9]+)’,1) 返回結(jié)果為:2019-01-22 |
python | re.findall(’[0-9]+.[0-9]+.[0-9]+’,string)返回結(jié)果為:2019-01-22 |
需求增加 | 如果我要只需日期22這個部分 |
python | re.findall(’[0-9]+.[0-9]+.([0-9]+)’,string)返回結(jié)果為:22,和上面的對比發(fā)現(xiàn)在最后一個[0-9]+外面加了一個小括號,有小括號就返回小括號里面的內(nèi)容 |
3、{ }一般用來表示匹配的長度,比如 \s{3} 表示匹配三個空格,\s{1,3}表示匹配一到三個空格例:
string= | ‘我正在學(xué)習(xí)python3的正則表達式,現(xiàn)在的日期是2019-01-22’ |
---|---|
目的 | 取出日期數(shù)據(jù)部分結(jié)果為2019,01,22 |
python | re.findall(’([0-9]{2,4})’,string) 返回結(jié)果為:[2019,01,22],python3中到3是一個數(shù)字,所以指定數(shù)據(jù)個數(shù)為2-4的就為日期部分的數(shù)字 |
常用正則表達式
匹配名 | 匹配表達式 | 例子 |
---|---|---|
轉(zhuǎn)義符 | \ | “n”匹配字符“n”。"\n"匹配一個換行符。串行"\\"匹配"\"而"\("則匹配"(" |
開始位置 | ^ | "abc,bac"匹配b開頭的bac[^b]([a-z]{3}) |
結(jié)束位置 | $ | "abce,abcd"匹配d結(jié)尾字母[a-z]+d$ |
表達式0次或多次 | * | |
表達式1次或多次 | + | |
表達式0次或1次 | ? | |
除\n任意字符 | . | |
單詞邊界 | \b | “er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er” |
非單詞邊界 | \B | “er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er” |
換頁符 | \f | |
空白行 | \n\s*\r | |
首尾空白字符 | ^\s* | \s*$ |
中文字符 | [\u4e00-\u9fa5] | |
雙字節(jié)字符(包含漢子在內(nèi)) | [^\x00-\xff] | |
數(shù)字 | [0-9]或\d | |
非數(shù)字 | \D | |
小寫字母 | [a-z] | |
大寫字母 | [A-Z] | |
大小寫字母 | [a-zA-Z] | |
英文加數(shù)字 | a-z0-9 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream
有些網(wǎng)頁中的數(shù)據(jù)進行了算法加密 這些算法代碼是JavaScript 加密的地方就是在js文件里,我們需要破解這些算法加密 就需要了解這加密的過程 獲取加密過程中的代碼 然后進行后續(xù)的反反爬蟲操作2021-10-10Python實現(xiàn)一鍵整理百度云盤中重復(fù)無用文件
有沒有頭疼過百度云盤都要塞滿了,可是又沒有工具能剔除大量重復(fù)無用的文件?這里教你一個用Python實現(xiàn)的簡單方法,通過整理目錄的方式來處理我們云盤中無用的文件吧2022-08-08淺談django不使用restframework自定義接口與使用的區(qū)別
這篇文章主要介紹了淺談django不使用restframework自定義接口與使用的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07在Python中使用SimpleParse模塊進行解析的教程
這篇文章主要介紹了在Python中使用SimpleParse模塊進行解析的教程,文章來自于IBM官方的開發(fā)者技術(shù)文檔,需要的朋友可以參考下2015-04-04python溫度轉(zhuǎn)換華氏溫度實現(xiàn)代碼
這篇文章主要介紹了python溫度轉(zhuǎn)換華氏溫度實現(xiàn)代碼內(nèi)容,有需要的朋友們可以測試下。2020-12-12Python opencv相機標定實現(xiàn)原理及步驟詳解
這篇文章主要介紹了Python opencv相機標定實現(xiàn)原理及步驟詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04一種Python工具的License授權(quán)機制詳解
這篇文章主要介紹了一種Python工具的License授權(quán)機制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06