问题描述:
在分析提取html中的信息时有时会用到正则表达式,什么时候用 .* ,什么时候用 .*? ,表示很困惑,接下来用例子来说明。
示例
import re
html = "<h2>TXT文本</h2><h2>word文档</h2>"
reg1 = re.findall(r'<h2>(.*?)</h2>', html)
print(".*?匹配示例:", reg1) # .*?示例
reg2 = re.findall(r'<h2>(.*)</h2>', html)
print(".*匹配示例:", reg2) # .*示例
结果:
.*?匹配示例: [‘TXT文本’, ‘word文档’]
.*匹配示例: [‘TXT文本</h2><h2>word文档’]
解释说明
(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配,意思就是每一次匹配的内容尽可能少,第一次遇到结尾字段就会切分,每一次匹配都不贪多。
(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配,意思就是每次匹配的内容会一直检索到更后面,只要更后面能匹配到结尾字段,哪怕中间也有结尾字段也会一直匹配下去直到遇到最后一次结尾字段,每一次匹配都尽可能贪最多的内容。