Python正則表達式中問號的四種用法

(1).原文符號
因爲?在正則表達式中有特殊的含義,所以如果想匹配?本身,則需要轉義,?

(2).有無量詞
問號可以表示重複前面內容的0次或一次,也就是要麼不出現,要麼出現一次。

(3).(非)貪婪匹配
貪婪匹配
在滿足匹配時,匹配儘可能長的字符串,默認情況下,採用貪婪匹配

string pattern1 = @"a.*c";   // greedy match 
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc"

非貪婪匹配
在滿足匹配時,匹配儘可能短的字符串,使用?來表示非貪婪匹配

'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:857662006 尋找有志同道合的小夥伴,互幫互助,
羣裏還有不錯的視頻學習教程和PDF電子書!
'''
string pattern1 = @"a.*?c";   // non-greedy match 
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"

幾個常用的非貪婪匹配Pattern

  • *? 重複任意次,但儘可能少重複
  • +? 重複1次或更多次,但儘可能少重複
  • ?? 重複0次或1次,但儘可能少重複
  • {n,m}? 重複n到m次,但儘可能少重複
  • {n,}? 重複n次以上,但儘可能少重複

(4).不捕捉模式

如何關閉圓括號的捕獲能力?而只是用它來做分組,方法是在左括號的後邊加上:?,這裏第一個圓括弧只是用來分組,而不會佔用捕獲變量,所以$1的內容只能是steak或者burger,而永遠不可能是bronto。

while(<>){
    if(/(?:bronto)(steak|burger)/){
        print "Fred wants a $1\n" ;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章