日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python re.match()用法相關示例

瀏覽:24日期:2022-06-29 08:25:32

學習python爬蟲時遇到了一個問題,書上有示例如下:

import reline=’Cats are smarter than dogs’matchObj=re.match(r’(.*)are(.*?).*’,line)if matchObj: print(’matchObj.group():’,matchObj.group()) print(’matchObj.group(1):’, matchObj.group(1)) print(’matchObj.group(2):’, matchObj.group(2))else: print(’No match!n’)

書上的期望輸出是:

matchObj.group(): Cats are smarter than dogsmatchObj.group(1): Cats matchObj.group(2):smarter

但是我在電腦上跑了一遍得到的輸出卻是:

matchObj.group(): Cats are smarter than dogsmatchObj.group(1): Cats matchObj.group(2):

于是開始想辦法徹底搞清楚這個差別的原因所在。

首先要讀懂這幾行代碼,而這一行代碼的關鍵在于這一句:

matchObj=re.match(r’(.*)are(.*?).*’,line)

匹配的正則表達式是

(.*)are(.*?).*前面的r表示的是匹配的字符不進行轉義,而要匹配的字符串是line,也就是Cats are smarter than dogs后面使用group(num),個人理解是,按照正則表達式中的括號數可以捕獲得到對應數量的捕獲組,而調用group(num)就可以得到對應捕獲組的內容,其中group(0)表示的是匹配的整個表達式的字符串,在本例中就是‘Cats are smarter than dogs’。參照網上可以搜到的符號的作用:.匹配除換行符以外的任意字符*重復之前的字符零次或更多次?重復之前的字符零次或一次那么第一個括號的內容,應當就是匹配要匹配的字符串中are之前的所有字符(除換行符),而第二個括號的內容應當是匹配are之后的內容,但具體想指代什么卻顯得有些不明確。不明確的點就在于*和?這兩個符號的連用,根據優先級這兩個符號是同一優先級的,那么應當按照順序生效,那么如此翻譯的話,這一語句匹配的就是長度為0到無限大的任意字符串,為了探清此時程序判斷的具體內容,我們給匹配字符串末尾的.*也加上括號以提取其內容,而后在輸出部分加上對應語句:

import reline=’Cats are smarter than dogs’matchObj=re.match(r’(.*)are(.*?)(.*)’,line)if matchObj: print('matchObj.group():',matchObj.group()) print('matchObj.group(1):', matchObj.group(1)) print('matchObj.group(2):', matchObj.group(2)) print('matchObj.group(3):', matchObj.group(3))else: print(’No match!n’)

得到的結果是:

matchObj.group(): Cats are smarter than dogsmatchObj.group(1): Cats matchObj.group(2): matchObj.group(3): smarter than dogs

可見第二個括號里的內容被默認為空了,然后刪去那個?,可以看到結果變成:

matchObj.group(): Cats are smarter than dogsmatchObj.group(1): Cats matchObj.group(2): smarter than dogsmatchObj.group(3):

那么這是否就意味著?的默認值很可能是0次,那?這個符號到底有什么用呢

仔細想來這個說法并不是很嚴謹。嘗試使用單獨的.?組合可以看到這個組合可以用于提取

單個不知道是否存在的字符,而如下代碼

import reline=’Cats are smarter than dogs’matchObj=re.match(r’(.*) are(.*)?’,line)if matchObj: print('matchObj.group():',matchObj.group()) print('matchObj.group(1):', matchObj.group(1)) print('matchObj.group(2):', matchObj.group(2))

也能在組別2中正常提取到are之后的字符內容,但稍微改動一下將?放到第二個括號內,

就什么也提取不到,同時導致group(0)中匹配的字符到Cats are就截止了(也就是第二個括號匹配失敗)。

令人感到奇怪的是,如果將上面的代碼改成

import reline=’Cats are smarter than dogs’matchObj=re.match(r’(.*) are (.*)+’,line)if matchObj: print('matchObj.group():',matchObj.group()) print('matchObj.group(1):', matchObj.group(1)) print('matchObj.group(2):', matchObj.group(2))

也就是僅僅將?改為+,雖然能成功匹配整個line但group(2)中沒有內容,

如果把+放到第二個括號中就會產生報錯,匹配失敗。

那么是否可以認為.*?這三個符號連用只是一個不規范的操作,但由于?的特殊性所以沒有報錯反而匹配成功了呢?

具體的可能要研究代碼本身的機理了,暫且擱置。還有一個問題就是如何達到樣例本身想要的,用第二個括號提取單個單詞的目的。

如果單單考慮這個例子的話,把原本第二個括號中的?換成r就可以了,也就是如下代碼:

import reline=’Cats are smarter than dogs’matchObj=re.match(r’(.*) are (.*r).*’,line)if matchObj: print('matchObj.group():',matchObj.group()) print('matchObj.group(1):', matchObj.group(1)) print('matchObj.group(2):', matchObj.group(2)) #print('matchObj.group(3):', matchObj.group(3))else: print(’No match!n’)

為了泛用性嘗試了一下把r改成‘ ’但是得到的結果是‘smarter than ’。于是嘗試把.換成表示任意字母的

[a-zA-Z],成功提取出了單個smarter,代碼如下:

import reline=’Cats are smarter than dogs’matchObj=re.match(r’(.*) are ([a-zA-Z]* ).*’,line)if matchObj: print('matchObj.group():',matchObj.group()) print('matchObj.group(1):', matchObj.group(1)) print('matchObj.group(2):', matchObj.group(2)) #print('matchObj.group(3):', matchObj.group(3))else: print(’No match!n’)

到此這篇關于python re.match()用法相關示例的文章就介紹到這了,更多相關python re.match()內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产成人精品亚洲线观看 | 久久免费精品| 亚洲一区黄色| 欧美特黄一区| 欧美在线综合| 日韩黄色免费网站| 国产午夜久久av| 中文字幕在线视频久| 久久伊人久久| 亚洲一级少妇| 精品91久久久久| 奇米狠狠一区二区三区| 色婷婷成人网| 精品成人18| 91成人精品| 国产亚洲精品美女久久久久久久久久| 欧美成人一二区| 不卡一二三区| 久久福利精品| 久久久国产精品入口麻豆| 丰满少妇一区| 国产高清一区| 国产精品极品国产中出| 国产精品毛片久久| 国产精品美女久久久| 蜜桃av一区二区| 成人国产精品一区二区网站| 日本午夜精品一区二区三区电影 | 国产伊人久久| 好看的av在线不卡观看| 亚洲视频电影在线| 午夜亚洲福利| 成人日韩精品| 国产欧美一区二区色老头| 精品国模一区二区三区| 亚洲一区二区三区四区五区午夜| 日本精品在线播放| 激情欧美一区| 国语精品一区| 欧美偷窥清纯综合图区| 欧美一级精品| 91欧美国产| 捆绑调教美女网站视频一区| 日韩欧美视频专区| 国产精品流白浆在线观看| 亚州av乱码久久精品蜜桃| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品欧美日韩一区| 亚洲成人一区| 狠狠躁少妇一区二区三区| 亚洲日产国产精品| 在线亚洲精品| 国产精品91一区二区三区| 国产成人77亚洲精品www| 婷婷综合网站| 亚洲啊v在线| 国产精品sss在线观看av| 亚洲一卡久久| 日韩一级网站| 日韩中文字幕亚洲一区二区va在线| 丁香婷婷久久| 极品av在线| 久久九九国产| 亚洲福利一区| 国产农村妇女精品一二区| 999国产精品| 午夜久久影院| 日韩在线观看中文字幕| av不卡在线看| 丝瓜av网站精品一区二区| 日韩欧美午夜| 1024精品久久久久久久久| 亚洲成人三区| 日本a级不卡| 国产一区二区三区四区五区| 国产精品最新自拍| 91亚洲国产| 免费日韩av片| 美女视频黄免费的久久| av免费不卡国产观看| 神马日本精品| 蜜桃视频在线观看一区| 欧美久久亚洲| 麻豆mv在线观看| 亚洲午夜免费| 久久香蕉网站| 国产精品av一区二区| 亚洲欧美日韩专区| 久久精品国产精品亚洲毛片| 欧美成a人片免费观看久久五月天| 精品一区二区三区视频在线播放| 日韩国产激情| 亚洲精品国产精品粉嫩| 色婷婷综合网| 日韩精品欧美大片| 99精品国产一区二区三区| 亚洲欧洲国产精品一区| 国产一区2区| 日韩高清中文字幕一区| 亚洲伦乱视频| 午夜天堂精品久久久久| 日韩激情一区| 美女视频免费精品| 日韩在线网址| 伊人久久亚洲美女图片| 电影91久久久| 欧美日韩亚洲一区二区三区在线| 国产91一区| 国产一二在线播放| 国产福利一区二区三区在线播放| 亚洲免费精品| 色婷婷精品视频| 国产一区二区三区天码| 国产欧美日韩在线观看视频| 日韩成人三级| 久久亚洲道色| 国产精品久久久久9999高清| 1024精品久久久久久久久| 国产精品99在线观看| 日韩精品久久久久久| 99成人在线| 伊人久久成人| 亚洲欧洲一区| 人人爽香蕉精品| 中文字幕一区二区三区四区久久 | 激情综合网五月| 色婷婷久久久| 日韩免费福利视频| 狠狠久久伊人中文字幕| 国产精品二区影院| 久久超级碰碰| 中文字幕高清在线播放| 国产一区2区| 亚洲精品一级二级| 欧美日韩中文一区二区| 日韩在线观看| 久久亚洲成人| 亚洲va久久| 麻豆免费精品视频| 理论片午夜视频在线观看| 午夜精品成人av| av不卡免费看| 国产日韩一区二区三区在线| 国产亚洲毛片| 国产精品日本一区二区三区在线| 国产欧美日韩精品高清二区综合区| 日韩精品社区| 美女福利一区二区三区| 蜜桃成人av| 清纯唯美亚洲综合一区| 黄色网一区二区| 亚洲深夜福利| 久久精品亚洲一区二区| 桃色av一区二区| 视频在线观看91| 精品视频一区二区三区在线观看| 中文字幕成在线观看| 在线国产一区| 欧美久久精品| 99香蕉国产精品偷在线观看| 丝袜美腿亚洲一区二区图片| 丝袜a∨在线一区二区三区不卡| 日韩精品电影一区亚洲| 国产成人精品一区二区免费看京| 狠狠久久婷婷| 国产suv精品一区二区四区视频| 欧美日韩国产综合网| 国产日韩欧美一区二区三区在线观看| 亚洲电影在线| 四虎国产精品免费观看| 免费成人在线观看| 日本不良网站在线观看| 日韩激情啪啪| 一级欧洲+日本+国产| 久久精品国产久精国产| 亚洲欧美日韩一区在线观看| 日韩激情啪啪| 蜜臀91精品一区二区三区| 日韩成人亚洲| 精品日韩一区| 韩国女主播一区二区三区| 亚洲精品第一| 最近国产精品视频| 亚洲日韩中文字幕一区| 国产一区视频在线观看免费| 日韩avvvv在线播放| 另类av一区二区| 99xxxx成人网| 国精品一区二区三区| 精品五月天堂| 激情久久一区二区| 高清一区二区三区| 国产aⅴ精品一区二区四区| 国产日韩欧美一区二区三区 | 免费观看久久av| 免费高潮视频95在线观看网站| 麻豆91小视频| 久久一区视频| 国产一二在线播放| 国产福利91精品一区二区|