鱼C论坛

 找回密码
 立即注册
查看: 2315|回复: 3

正则表达匹配问题

[复制链接]
发表于 2020-10-22 14:35:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
见以下代码, 看正则表达式是可以匹配, 在网上在线测试也是可以匹配的. 为什么在IDLE中匹配不到任何东西?
bp和pc表达式在线测试匹配都是可以匹配的到, 在IDLE中就匹配不到.

  1. >>> b = '<img class="test" src="/img/logo.gif" title="测试" />'
  2. >>> bp = '<img\b.*?src="(.*?)".*?>'
  3. >>> re.findall(bp,b)
  4. []
复制代码

  1. >>> pc = '<img\b.*?src="([^"]*)"[^>]*>'
  2. >>> re.findall(pc,b)
  3. []
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-22 15:43:25 | 显示全部楼层
为什么要加\b?
  1. import re
  2. b = '<img class="test" src="/img/logo.gif" title="测试" />'
  3. bp = '<img.*?src="(.*?)".*?>'
  4. print(re.findall(bp,b))
  5. pc = '<img.*?src="([^"]*)"[^>]*>'
  6. print(re.findall(pc,b))
复制代码


['/img/logo.gif']
['/img/logo.gif']
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-23 09:01:32 | 显示全部楼层
本帖最后由 Nate_2020 于 2020-10-23 09:02 编辑


从理论上分析加\b才精确才对呀, \b为单词边界, 如果没有\b, 那imgclass也是会匹配的
  1. >>> b1 = '<imgclass="test" src="/img/logo.gif" title="测试" />'
  2. >>> print(re.findall(bp,b))
  3. ['/img/logo.gif']
  4. >>> print(re.findall(bp,b1))
  5. ['/img/logo.gif']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-23 09:06:26 | 显示全部楼层
本帖最后由 Nate_2020 于 2020-10-23 09:07 编辑

突然发现了问题, 不是\b的问题, 是表达式少了r的问题, 导致\没有起到作用.

  1. >>> b
  2. '<img class="test" src="/img/logo.gif" title="测试" />'
  3. >>> bp1 = r'<img\b.*?src="(.*?)".*?>'
  4. >>> print(re.findall(bp1,b))
  5. ['/img/logo.gif']
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 09:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表