鱼C论坛

 找回密码
 立即注册
查看: 2867|回复: 4

关于正则的贪婪和非贪婪 麻烦大神帮忙看一下

[复制链接]
发表于 2023-11-13 11:31:49 | 显示全部楼层 |阅读模式

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

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

x
  1. import re

  2. # 定义一个字符串
  3. text = 'abcdwabcdf'

  4. # 定义贪婪模式的正则表达式
  5. pattern_greedy = r'a.*f'
  6. result_greedy = re.findall(pattern_greedy, text)

  7. # 定义非贪婪模式的正则表达式
  8. pattern_non_greedy = r'a.*?f'
  9. result_non_greedy = re.findall(pattern_non_greedy, text)

  10. print('贪婪模式匹配结果:', result_greedy)
  11. print('非贪婪模式匹配结果:', result_non_greedy)
复制代码



我想匹配的是“abcdf”  但是2个匹配到的结果都是一样的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 11:32:00 | 显示全部楼层
贪婪模式匹配结果: ['abcdwabcdf']
非贪婪模式匹配结果: ['abcdf']

在贪婪模式中,正则表达式 r'a.*f' 会尽可能多地匹配任意字符 .* ,直到找到最后一个字符 f 为止。因此,它匹配到了整个字符串'abcdwabcdf'。

而在非贪婪模式中,正则表达式 r'a.*?f' 中的 *? 表示非贪婪匹配,会尽可能少地匹配任意字符,直到找到第一个字符 f 为止。因此,它只匹配到了'abcdf'这个子串。

因此,你可以看到贪婪模式和非贪婪模式在匹配结果上的差异。

评分

参与人数 1鱼币 +2 收起 理由
简单滴滴 + 2 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2023-11-13 11:32:45 | 显示全部楼层
在您提供的代码中,贪婪模式的正则表达式 r'a.*f' 和非贪婪模式的正则表达式 r'a.*?f' 都会匹配到相同的结果,这是因为在您的字符串中,有两个 'a' 和一个 'f',因此无论使用哪种模式都会匹配整个字符串。

要匹配您期望的结果“abcdf”,可以采用下述方式进行修改:
  1. import re
  2. text = 'abcdwabcdf'
  3. # 使用非贪婪模式的正则表达式
  4. pattern_non_greedy = r'a.*?f'
  5. result_non_greedy = re.findall(pattern_non_greedy, text)
  6. print('非贪婪模式匹配结果:', result_non_greedy)
复制代码

这样就能得到您所需的结果。

希望这次回答对您有所帮助。如有其他问题,欢迎继续提问。

评分

参与人数 1鱼币 +2 收起 理由
简单滴滴 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-11-13 11:35:59 | 显示全部楼层
isdkz 发表于 2023-11-13 11:32
贪婪模式匹配结果: ['abcdwabcdf']
非贪婪模式匹配结果: ['abcdf']

我想匹配的是 ['abcdf']
非贪婪匹配的也是 ['abcdwabcdf']
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-13 11:37:04 | 显示全部楼层
Mike_python小 发表于 2023-11-13 11:32
在您提供的代码中,贪婪模式的正则表达式 r'a.*f' 和非贪婪模式的正则表达式 r'a.*?f' 都会匹配到相同的结 ...
  1. pattern_non_greedy = r'a.*?f'
复制代码

匹配到的也是 ['abcdwabcdf']
是哪里错了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 08:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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