非貪婪匹配
將盡可能少的匹配內容,當?出現在其他的重複次數後面時會將貪婪模式改為非貪婪模式。?如
abc.*?
abc.+?
非貪婪匹配:盡可能少的匹配??
?*? # *號表示 *號前面的字元出現0--無數個 ?號表示最少匹配
+? # +號表示 +號前面的字元出現1--無數個
?? # ??表示0--1個
print(re.findall(r'ab', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
print(re.findall(r'ab?', 'aababbabbb')) # ['a', 'a', 'a', 'a']
print(re.findall(r'ab', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
print(re.findall(r'ab?', 'aababbabbb')) # ['a', 'a', 'a', 'a']
print(re.findall(r'ab', 'aababbabbb')) # ['ab', 'abb', 'abbb']
print(re.findall(r'ab?', 'aababbabbb')) # ['ab', 'ab', 'ab']
print(re.findall(r'ab*', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
print(re.findall(r'ab*?', 'aababbabbb')) # ['a', 'a', 'a', 'a']
print(re.findall(r'ab+', 'aababbabbb')) # ['ab', 'abb', 'abbb']
print(re.findall(r'ab+?', 'aababbabbb')) # ['ab', 'ab', 'ab']
print(re.findall(r'ab?', 'aababbabbb')) # ['a', 'ab', 'ab', 'ab']
print(re.findall(r'ab??', 'aababbabbb')) # ['a', 'a', 'a', 'a']
print(re.findall(r'', '')) # ['']
print(re.findall(r'a', 'a')) # ['', '']
# 非貪婪匹配結合單個匹配結果是沒有任何意義的
print(re.findall(r'b*?', 'bbbbbbbb'))
print(re.findall(r'(?:ab)*?', 'bbbbbbbb'))
# 非貪婪匹配的應用場景,正則一定會有首尾標識,中間匹配的結果會有非貪婪匹配的語法
s = 'abc
'print(re.findall(r'<.*>', s)) # ['abc
']print(re.findall(r'<.*?>', s)) # ['', '', '', '']
print(re.findall(r'(.*)', s)) # ['abc
']print(re.findall(r'(.*?)', s)) # ['abc', '']
正則非貪婪匹配
string str 註冊商 xiamen ename network technology corporation limited dba ename corp,網域名稱伺服器 whois.ename.com,相關 dns 伺服器 ns1.ename.net,dns 伺服器 ns2.ename.n...
re模組中的非貪婪匹配
python的re模組中有貪婪匹配和非貪婪匹配之分,當使用 時會匹配零個或多個,使用 時會匹配乙個或多個.當使用?在前邊特殊符號前時會進行非貪婪匹配,匹配零個或者乙個,今天主要討論非貪婪匹配中存在的坑.import re res re.findall a?aaa print res a a a re...
貪婪匹配和非貪婪匹配
貪婪模式 在整個表示式匹配成功的前提下,盡可能多的匹配 非貪婪模式 在整個表示式匹配成功的前提下,盡可能少的匹配 重複匹配0次或1次 重複匹配0次或更多次 重複匹配1次或更多次 預設情況下是貪婪的!content abbbbc pattern re.compile r ab result patte...