【正则表达式】最短匹配与最长匹配
在使用正则表达式匹配 HTML 源代码时,遇到这么一个问题
<td>[
网络
]<spantitle="xxxx">xxxxx,...</span></td><!--<td>xxx/xxx--><!--/xxx--><!--</td>--><td>xxx</td><td>2019-01-1414: 36</td><td></td><td>
我想匹配的结果是:
<td>[
网络
]<spantitle="xxxx">xxxxx,...</span></td>
正则表达式 <td>\[\s*网络\s*\].+</td>
得到的结果却是:
<td>[
网络
]<spantitle="xxxx">xxxxx,...</span></td><!--<td>xxx/xxx--><!--/xxx--><!--</td>--><td>xxx</td><td>2019-01-1414: 36</td><td></td>
解决办法很简单,只需要 .*
后面加 ?
,也就是 <td>\[\s*网络\s*\].+?</td>
<td>[
网络
]<spantitle="xxxx">xxxxx,...</span></td>
*、+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
参考文章:
Python 正则表达式尽可能小的匹配(遇到第一个结束字符串就停止匹配)- 昊天 SEO (opens new window)
上次更新: 2022/01/05, 22:36:44