2024年python 爬虫 贪婪算法和非贪婪算法 match()
在Python中,正则表达式的match()
函数用于从字符串的起始位置匹配一个模式。match()
函数是贪婪的,它会尽可能多地匹配字符,而match()
函数也可以使用非贪婪模式。
贪婪算法在可以匹配成功的前提下,尽可能多的匹配字符,非贪婪算法在可以匹配成功的前提下,尽可能少的匹配字符。
在Python中,使用match()
函数的贪婪算法和非贪婪算法的方式如下:
- 贪婪算法:在模式后面加上
+
,表示匹配一个或多个字符。
import re
string = "abbbc"
pattern = "ab*c"
# 贪婪算法
matchObj = re.match(pattern, string)
if matchObj:
print("matchObj.group() : ", matchObj.group())
else:
print("No match found")
在上述代码中,模式是ab*c
,其中*
表示匹配前面的字符零次或多次。在贪婪模式下,它会尽可能多的匹配字符,因此输出结果是abbbc
。
- 非贪婪算法:在模式后面加上
?
,表示匹配一个或零个字符。
import re
string = "abbbc"
pattern = "ab*?c"
# 非贪婪算法
matchObj = re.match(pattern, string)
if matchObj:
print("matchObj.group() : ", matchObj.group())
else:
print("No match found")
在上述代码中,模式是ab*?c
,其中?
表示非贪婪模式,在可以匹配成功的前提下,尽可能少的匹配字符,因此输出结果是abc
。
在Python中,match()
函数默认是贪婪的,如果想使其变为非贪婪,可以在量词后面加上?
。在实际使用中,可以根据需要选择贪婪算法或非贪婪算法。
评论已关闭