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

Python正則表達(dá)式?r'(.*)?are?(.*?)?.*'的深入理解

 更新時間:2022年07月06日 14:41:08   作者:linng12  
日常的開發(fā)工作中經(jīng)常會有處理字符串的需求,簡單的字符串處理,我們使用python內(nèi)置的字符串處理函數(shù)就可以了,但是復(fù)雜的字符串匹配就需要借助正則表達(dá)式了,這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式?r‘(.*)?are?(.*?)?.*‘的相關(guān)資料,需要的朋友可以參考下

在學(xué)習(xí)Python3的正則表達(dá)式的時候遇到一個例子

#!/usr/bin/python3
import re
 
line = "Cats are smarter than dogs"
# .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
# (.*?) 表示"非貪婪"模式,只保存第一個匹配到的子串
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
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!!")

運(yùn)行結(jié)果為

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

這個例子主要的理解為r‘(.*) are (.*?) .*’,以下為我查詢資料之后所得到的個人理解以及試驗

  1. 前面的r比較好理解,表示字符串為非轉(zhuǎn)義的原始字符串,讓編譯器忽略反斜杠,也就是忽略轉(zhuǎn)義字符。但是這個例子中字符串里沒有反斜杠,所以這個r可有可無。
  2. (.*) 第一個匹配分組,.*代表匹配除換行符之外的所有字符
  3. (.*?)第二個匹配分組,.*?后面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字符
  4. 后面的一個.*  沒有括號包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結(jié)果中。

綜上所屬以一種通俗易懂的描述就是將字符串以are為中斷分為幾部分,(.*)因為是貪婪的,所以返回的是所有滿足條件的內(nèi)容太,(.*?)為非貪婪模式,所以返回第一個滿足要求的內(nèi)容或沒有

匹配成功,這句話如果不好理解就看看下面這個例子

  #!/usr/bin/python3
  
  import re
   
  #line = "Cats are smarter than dogs"
  line = "a a Cats are Cats are smarter than dogs"
  # .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
  # (.*?) 表示"非貪婪"模式,只保存第一個匹配到的子串
  matchObj = re.match( r'(.*) are (.*) .*', line, re.M|re.I)
   
  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!!")

輸出結(jié)果:

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

這個例子主要是將第一個例子中的line字符串進(jìn)行了觀察輸出結(jié)果

group(1)對應(yīng)第一個括號的條件,我理解為最后滿足are分段的前面的所有內(nèi)容,如果將第一個括號改為(.*?)就是第一個are的前面內(nèi)容,經(jīng)過驗證確實是這樣的,這里就不貼程序了可以自行驗證

以下示例為更好的解釋第二個括號的內(nèi)容以及無括號的.*

 #!/usr/bin/python3
  
  import re
   
  #line = "Cats are smarter than dogs"
  line = "a a Cats are Cats are smarter than dogs"
  # .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
  # (.*?) 表示"非貪婪"模式,只保存第一個匹配到的子串
  matchObj = re.match( r'(.*?) are (.*) .* .*', line, re.M|re.I)             
   
  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!!")

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

group(2)對應(yīng)第二個括號的條件:因為我將這里第一個括號的內(nèi)容添加了?所以第一個括號索引的內(nèi)容就是第一個are前面的內(nèi)容,第二個括號就在當(dāng)前這個are之后開始索引,在這里我沒有加不加? 所以輸出為輸出后面出去.*條件的所有內(nèi)容

.*因為沒有()所以不能使用group訪問,但是會實際占用位置,上面例子最后使用了兩個.* 所以最后占用兩個單詞,那么前面的內(nèi)容就是group(2)的輸出內(nèi)容了

可以自己嘗試一個多加幾個 are在語句中 然后判斷語句修改有無?或者括號進(jìn)行觀察效果

  #!/usr/bin/python3
  
  import re
  
  #line = "Cats are smarter than dogs"
  line = "a a Cats are CatsB are smarter are than are dogs are dogs b c d e"
  # .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
  # (.*?) 表示"非貪婪"模式,只保存第一個匹配到的子串
  matchObj = re.match( r'(.*?) are (.*?) (.*?) (.*) .*', line, re.M|re.I)    
   
  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))
      print ("matchObj.group(4) : ", matchObj.group(4))
  else:
      print ("No match!!")

matchObj.group() :  a a Cats are CatsB are smarter are than are dogs are dogs b c d e
matchObj.group(1) :  a a Cats
matchObj.group(2) :  CatsB
matchObj.group(3) :  are
matchObj.group(4) :  smarter are than are dogs are dogs b c d

總結(jié)

到此這篇關(guān)于Python正則表達(dá)式 r‘(.*) are (.*?) .*‘的深入理解的文章就介紹到這了,更多相關(guān)Python正則表達(dá)式 r‘(.*) are (.*?) .*‘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 如何利用chinese_calendar 獲取上一個工作日日期

    python 如何利用chinese_calendar 獲取上一個工作日日期

    這篇文章主要介紹了python 利用chinese_calendar 獲取上一個工作日日期,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • OpenCV 表盤指針自動讀數(shù)的示例代碼

    OpenCV 表盤指針自動讀數(shù)的示例代碼

    這篇文章主要介紹了OpenCV 表盤指針自動讀數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python中hash加密簡介及使用方法

    Python中hash加密簡介及使用方法

    常見 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已經(jīng)被破解,一般推薦至少使用 SHA2-256 算法,接下來通過本文給大家介紹Python中hash加密簡介及使用方法,感興趣的朋友一起看看吧
    2022-01-01
  • 教你利用Python+Turtle繪制簡易版愛心表白

    教你利用Python+Turtle繪制簡易版愛心表白

    這篇文章主要介紹了教你利用Python+Turtle繪制簡易版愛心表白,文中有非常詳細(xì)的代碼示例,對想要和男朋友或者女朋友表白的小伙伴們有很大幫助喲,需要的朋友可以參考下
    2021-04-04
  • Python+django實現(xiàn)文件下載

    Python+django實現(xiàn)文件下載

    本文是python+django系列的第二篇文章,主要是講述是先文件下載的方法和代碼,有需要的小伙伴可以參考下。
    2016-01-01
  • python實現(xiàn)單機(jī)五子棋對戰(zhàn)游戲

    python實現(xiàn)單機(jī)五子棋對戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)單機(jī)五子棋對戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • python 爬蟲一鍵爬取 淘寶天貓寶貝頁面主圖顏色圖和詳情圖的教程

    python 爬蟲一鍵爬取 淘寶天貓寶貝頁面主圖顏色圖和詳情圖的教程

    今天小編就為大家分享一篇python 爬蟲一鍵爬取 淘寶天貓寶貝頁面主圖顏色圖和詳情圖的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 使用python框架Scrapy爬取數(shù)據(jù)的操作步驟

    使用python框架Scrapy爬取數(shù)據(jù)的操作步驟

    Scrapy是一個基于Python的強(qiáng)大的開源網(wǎng)絡(luò)爬蟲框架,用于從網(wǎng)站上抓取信息,它提供了廣泛的功能,使得爬取和分析數(shù)據(jù)變得相對容易,本文小編將給給大家介紹一下如何使用python框架Scrapy爬取數(shù)據(jù),需要的朋友可以參考下
    2023-10-10
  • Django中Middleware中的函數(shù)詳解

    Django中Middleware中的函數(shù)詳解

    這篇文章主要介紹了Django中Middleware中的函數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python實現(xiàn)擴(kuò)展內(nèi)置類型的方法分析

    Python實現(xiàn)擴(kuò)展內(nèi)置類型的方法分析

    這篇文章主要介紹了Python實現(xiàn)擴(kuò)展內(nèi)置類型的方法,結(jié)合實例形式分析了Python嵌入內(nèi)置類型擴(kuò)展及子類方式擴(kuò)展的具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10

最新評論