正則表達式非貪婪模式詳解

正則表達式(non-greedy mode)指的是正則表達式中的量詞儘可能地匹配更少的字符。本文將從多個方面詳細闡述正則表達式非貪婪模式,並為你提供相關的代碼示例。

一、正則非貪婪模式怎樣表示

要想開啟正則表達式非貪婪模式,需要在量詞後面添加“?”。在Java、Python等編程語言中,可以在量詞後面添加“?”,例如:


import re
# 將貪婪模式轉為非貪婪模式
str = 'aacc
ee' str_list = re.findall(r"", str) print(str_list) # ['', '
']

在上述代碼中,r””中的問號就代表了非貪婪模式。這個正則表達式的匹配結果為[”, ‘

‘],只匹配一個尖括號內的內容。

二、正則貪婪匹配

在正則表達式中,默認情況下,量詞是貪婪的。這意味着量詞“*”、“+”、“?”、“{n,}”、“{n,m}”儘可能匹配多的字符。例如,正則表達式將匹配整個字符串“百度”,因為“.*”被解釋為所有字符的重複的0次或多次。因此,非貪婪模式將盡量少地匹配字符。

三、正則表達式里非貪婪模式

正則表達式里的非貪婪模式可以解決一些量詞匹配過多字符的問題。例如,在下面的字符串“TitleMain Text”中,如果運用貪婪模式,用正則表達式匹配“”時,會匹配整個字符串。但是如果運用非貪婪模式開啟“”,則可以將這個字符串分段匹配。我們可以使用Python中的re模塊實現如下:


import re

string = "TitleMain Text"
GreedyRegex = re.compile(r'')      # 貪婪模式
Results = GreedyRegex.findall(string)   # ['TitleMain Text']
NonGreedyRegex = re.compile(r'')   # 非貪婪模式
Results2 = NonGreedyRegex.findall(string)  # ['', '', '', '', '', 'Main Text', '']

在上述代碼中,我們創建了兩個正則表達式實例,分別用貪婪模式和非貪婪模式匹配字符串。我們可以看到第一個正則表達式實例返回了完整的字符串,而第二個正則表達式實例則將字符串分解成了多個段落。

四、正則中的非貪婪模式怎麼表達

在正則表達式中,非貪婪模式可以使用“?”來表示。當量詞後面跟着“?”時,它會盡量匹配最少的字符,而不是最多的字符,這就是非貪婪模式。

五、正則表達式貪婪模式代碼


import re

str = "abc123abc456"
patt1 = "\d+"
patt2 = "\d+?"
res1 = re.findall(patt1,str)
res2 = re.findall(patt2,str)
print('貪婪模式匹配結果:',res1)      # ['123', '456']
print('非貪婪模式匹配結果:',res2)   # ['1', '2', '3', '4', '5', '6']

在上述代碼中,“\d+”代表貪婪模式,它會儘可能多地匹配數字。而“\d+?”代表非貪婪模式,它會盡量少地匹配數字。因此,貪婪模式的輸出結果是[‘123’, ‘456’],而非貪婪模式的輸出結果是[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]。

六、正則表達式非貪婪匹配

非貪婪匹配是一種匹配方法,在這種方法中,文本被儘可能少地匹配,以保證最小化匹配範圍。如前所述,可以使用“?”後綴來強制其執行非貪婪匹配。

例如,在Python中使用re模塊進行非貪婪匹配時,可以將?添加到特定字符後面,以執行非貪婪匹配。例如,在下面的代碼中,使用正則表達式匹配字符串“find and save the http://www.google.com,and another3323”,運用非貪婪模式可以分別匹配鏈接和文本,如下:


import re

str="3323find and save the http://www.google.com,and another3323"
regexobj=re.compile(r"")
matchobj=regexobj.findall(str)
print(matchobj)

在上述代碼中,r””中的問號就代表了非貪婪模式。這個正則表達式的匹配結果為[”, ”, ”, ”, ”, ”]。

七、正則 貪婪

正則表達式中,貪婪性是默認的。它會儘可能多地匹配字符,直到無法再匹配為止。例如,在下面的字符串“

標題

正文”中,如果使用“”的正則表達式,將會輸出整個字符串“

標題

正文”。在正則表達式中,注意語法不當可能會產生貪婪行為。

八、正則非貪婪匹配

相對於貪婪匹配而言,正則表達式的非貪婪模式匹配更少的字符。當量詞跟隨一個問號時,將被轉化為非貪婪模式。例如,在下面的字符串“abc123abc456abc789”中,如果使用“\d+”的正則表達式,輸出結果為[‘123’, ‘456’, ‘789’]。如果加上“?”的非貪婪模式,將輸出結果為[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]。

以上就是本文對正則表達式非貪婪模式的全面闡述。無論在哪個編程語言中,掌握非貪婪模式都是必要的。希望本文能夠對你有所幫助。

原創文章,作者:BKSJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149617.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BKSJ的頭像BKSJ
上一篇 2024-11-05 16:52
下一篇 2024-11-05 16:53

相關推薦

  • Python正則表達式search()和match()有什麼區別?

    search()和match()都是Python中的正則表達式函數,它們的作用都是在一個字符串中搜索匹配正則表達式的位置,但它們有着不同的使用場景和返回結果。 一、search()…

    編程 2025-04-29
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • 顯示C++設計模式

    本文將詳細介紹顯示C++設計模式的概念、類型、優點和代碼實現。 一、概念 C++設計模式是在軟件設計階段定義,用於處理常見問題的可重用解決方案。這些解決方案是經過測試和驗證的,並已…

    編程 2025-04-27
  • MySQL正則表達式替換

    MySQL正則表達式替換是指通過正則表達式對MySQL中的字符串進行替換。在文本處理方面,正則表達式是一種強大的工具,可以方便快捷地進行字符串處理和匹配。在MySQL中,可以使用正…

    編程 2025-04-27
  • Centos7進入單用戶模式的解釋

    本文將介紹如何在Centos7中進入單用戶模式,並從以下幾個方面進行詳細的闡述。 一、Centos7進入單用戶模式的解答 在Centos7中進入單用戶模式需要執行以下步驟: 1. …

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論