正則表達式貪婪性---點星(.*) 20190618


"""
1.正則表達式的貪婪性(.*)
點(.)表示匹配出換行符以外的任意一個字符串
星號(*)表示匹配前面一個字符串0次或多次
這兩個字符串一起使用表示匹配除換行符以外的任意多個字符;
也就是說(.*)組合時,會盡可能多的去匹配滿足條件的字符換;
這就是點星(.*)的貪婪性
"""
import re
s = ".*1234anfdk\nfds"
res = re.match(r".*",s).group()
print(res
 
        
"""
2.正則表達式的貪婪性(.*)
只有當正則表達式中要匹配的字符數小於等於原字符串中的字符數時,才有可能匹配出結果;
".*"在匹配的過程中會回溯,先匹配0次,如果整個表達式能匹配成功,再匹配一次;
如果還能匹配,那就再匹配兩次,這樣一次次匹配下去,知道不能匹配成功時,返回最近一次匹配成功的結果。
這就是".*"的貪婪性!
"""
import re
try:
    res1 = re.match(r'.*..','..').group()
except AttributeError as e:
    print("匹配失敗")
else:
    print("為發生異常")
    print("匹配結果是:",res1)
mport re
try:
    res1 = re.match(r'.*g.','.*g235abcf').group()
except AttributeError as e:
    print("匹配失敗")
else:
    print("為發生異常")
    print("匹配結果是:",res1)
#本次匹配不成功,因為正則表達式中葯匹配的字符串大於原字符串
import re
try:
    res1 = re.match(r'.*...','..').group()
except AttributeError as e:
    print(u"匹配失敗")
else:
    print("為發生異常")
    print("匹配結果是:",res1)
"""
3.正則表達式的貪婪性
在點星(.*)后面加上問號(?),表示匹配前面匹配的字符0次或1次;這樣就可以限制點星(.*)的貪婪性
"""
import re
line = 'this is gowod 1234wordtestd'

#未限制貪婪性
res1 = re.search(r".*1.*d",line,re.M|re.I)
print(res1.group())

#限制貪婪性
res2 = re.search(r".*1.*?d",line,re.M|re.I)
print(res2.group())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM