正则表达匹配问题
见以下代码, 看正则表达式是可以匹配, 在网上在线测试也是可以匹配的. 为什么在IDLE中匹配不到任何东西?bp和pc表达式在线测试匹配都是可以匹配的到, 在IDLE中就匹配不到.
>>> b = '<img class="test" src="/img/logo.gif" title="测试" />'
>>> bp = '<img\b.*?src="(.*?)".*?>'
>>> re.findall(bp,b)
[]
>>> pc = '<img\b.*?src="([^"]*)"[^>]*>'
>>> re.findall(pc,b)
[] 为什么要加\b?
import re
b = '<img class="test" src="/img/logo.gif" title="测试" />'
bp = '<img.*?src="(.*?)".*?>'
print(re.findall(bp,b))
pc = '<img.*?src="([^"]*)"[^>]*>'
print(re.findall(pc,b))
['/img/logo.gif']
['/img/logo.gif'] 本帖最后由 Nate_2020 于 2020-10-23 09:02 编辑
疾风怪盗 发表于 2020-10-22 15:43
为什么要加\b?
从理论上分析加\b才精确才对呀, \b为单词边界, 如果没有\b, 那imgclass也是会匹配的
>>> b1 = '<imgclass="test" src="/img/logo.gif" title="测试" />'
>>> print(re.findall(bp,b))
['/img/logo.gif']
>>> print(re.findall(bp,b1))
['/img/logo.gif'] 本帖最后由 Nate_2020 于 2020-10-23 09:07 编辑
突然发现了问题, 不是\b的问题, 是表达式少了r的问题, 导致\没有起到作用.
>>> b
'<img class="test" src="/img/logo.gif" title="测试" />'
>>> bp1 = r'<img\b.*?src="(.*?)".*?>'
>>> print(re.findall(bp1,b))
['/img/logo.gif']
页:
[1]