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)
暂无评论