"""
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())