欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解讀python正則表達式括號問題

 更新時間:2022年09月24日 11:33:14   作者:zxdqdcxy  
這篇文章主要介紹了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
hiveselect regexp_extract(string,’(python)’,1) 返回結(jié)果為:python,1代碼返回正則的第幾個括號中的內(nèi)容
pythonre.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
hiveselect regexp_extract(string,’[a-z]’,0) 返回結(jié)果為:python,0代碼返回符合正則的內(nèi)容,如果有小括號可以寫1(如'([a-z]+)')
pythonre.findall(’[a-z]+’,string)返回結(jié)果為:python
目的給定字符進內(nèi)容匹配獲取日期2019-01-22
hiveselect regexp_extract(string,’([0-9]+.[0-9]+.[0-9]+)’,1) 返回結(jié)果為:2019-01-22
pythonre.findall(’[0-9]+.[0-9]+.[0-9]+’,string)返回結(jié)果為:2019-01-22
需求增加如果我要只需日期22這個部分
pythonre.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
pythonre.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)文章

最新評論