cuiqingcai大佬《Python3 网络爬虫开发实战》整理
贪婪与非贪婪
import re content = ‘Hello 12345678 Word_This is a Regex Demo‘ result = re.match(‘^He.*(\d+).*Demo$‘, content) print(result.group(1))
原本打算取出12345678,但
运行结果:8
贪婪匹配模式:.* 会匹配尽可能多的字符。
.*后(\d+)至少匹配一个数字,未指定具体数字。因此,.*尽可能匹配多的字符,把1234567匹配,给\d+留下一个仅满足条件的结果8。
so,最后结果就至于8了。
非贪婪模式匹配:.*? 尽可能匹配少的字符,余下交给后面的去匹配。
在.*后加一个?
import re content = ‘Hello 12345678 World_This is a Regex Demo‘ result = re.match(‘^He.*?(\d+).*Demo$‘, content) print(result.group(1))
运行结果:12345678
所以,匹配时,字符中间尽量用非贪婪匹配,以免出现匹配结果确实的情况。若是匹配结果在字符串结果,.*?有可能匹配不到任何内容,因为它会匹配尽可能少的字符。
import re content = ‘http://weibo.com/comment/kEraCN‘ result1 = re.match(‘^h.*?comment/(.*?)‘, content) result2 = re.match(‘^h.*?comment/(.*)‘, content) print(‘result1‘, result1.group(1)) print(‘result2‘, result2.group(2))
原文地址:https://www.cnblogs.com/hyeTi/p/9568897.html
时间: 2024-10-19 11:37:40