boxmoe_header_banner_img

Hello~ 欢迎来到ZeroKt工作室!

加载中

文章导读

爬虫练习——贪婪/非贪婪匹配


avatar
root 2025年11月12日 90

Python贪婪匹配

贪婪匹配是正则表达式的一种默认匹配方式,它会尽可能多地匹配满足条件的字符,当正则表达式遇到一个可以匹配多种长度的字符序列时,它会选择最长的那个序列进行匹配,使用.*可以匹配任意长度的任意字符

示例

假设我们有一个字符串"Hello, world! ",我们想要匹配从"Hello"开始到空格之前的所有字符。如果我们使用正则表达式"Hello.*"进行匹配,结果会是整个字符串,因为.*(任意数量的任意字符)会尽可能多地匹配字符,直到字符串的末尾

import re # 导入re库

text = "Hello, world! "
text = re.findall(r"Hello.*", text)
print(text) # 输出: ['Hello, world!']

Python非贪婪匹配

非贪婪匹配与贪婪匹配相反,非贪婪匹配(也称为最小匹配或懒惰匹配)会尽可能少地匹配满足条件的字符。在正则表达式中,通过在量词(如*、+、?)后面加上?可以实现非贪婪匹配

示例

如果我们只想匹配到"Hello"和紧接着的第一个空格之前的字符,我们可以使用非贪婪匹配"Hello.*?"

import re

text = "Hello, world!"
text = re.findall(r"Hello.*?, ", text)
print(text)  # 输出: ['Hello, ']

实例应用:提取HTML标签内容

假设你想从一个简单的HTML字符串中提取<p>标签内的内容

import re

html = "<html><body><p>This is a HTML.</p></body></html>"
text = re.findall(r"<p>(.*?)</p>", html)
print(text) # 输出 :['This is a HTML.']

在这个例子中,使用非贪婪匹配(.*?)确保了我们只匹配到<p>标签和</p>标签之间的内容,而不是整个HTML字符串



评论(0)

查看评论列表

暂无评论


发表评论