鱼C论坛

 找回密码
 立即注册
查看: 1022|回复: 6

[已解决]关于正则表达式“([abc])+”条件返回值的问题

[复制链接]
发表于 2020-3-7 15:45:28 | 显示全部楼层 |阅读模式

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

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

x
请教一下:
  1. import re
  2. n = re.findall("([abc])+", "abcdabcaaaec")
  3. print(n)
复制代码

贪婪匹配第一个返回“c”可以理解,第二个返回的“a”,为什么不是“aaa”?
最佳答案
2020-3-7 18:44:00
l0stparadise 发表于 2020-3-7 18:36
我意思是为啥不返回["c","a","a","a","c"]

贪婪算法是一直算到不行,然后在退一个
举个例子
([abc])+ 去匹配 “abcd”
返回的是 c
原因
p表示遍历字符串下标
p=0 ‘a‘’ Ok
P=1 ‘b’ Ok
p=2 'c' Ok
P=3 'd' No
所以范围就是 匹配的字符串'abc'
但是你加了()表示从匹配的部分中选取,满足匹配[abc]
此时p=2 故返回 ‘c’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 16:09:31 | 显示全部楼层
[abc]只是表示一个字符 ([abc])  re.findall()每个元素都是一个字符
n = re.findall("([abc]+)", "abcdabcaaaec") 你试试是什么效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 16:50:14 | 显示全部楼层
TJBEST 发表于 2020-3-7 16:09
[abc]只是表示一个字符 ([abc])  re.findall()每个元素都是一个字符
n = re.findall("([abc]+)", "abcda ...

嗯,返回的列表只有三个值["c","a","c"],为啥不返回多个“a”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 16:56:30 | 显示全部楼层
l0stparadise 发表于 2020-3-7 16:50
嗯,返回的列表只有三个值["c","a","c"],为啥不返回多个“a”

l括号里面不是[abc]吗 [abc]匹配1个字符啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 17:42:57 | 显示全部楼层
"abcdabcaaaec" 你把‘d’移一移位置就明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 18:36:01 | 显示全部楼层
TJBEST 发表于 2020-3-7 16:56
l括号里面不是[abc]吗 [abc]匹配1个字符啊

我意思是为啥不返回["c","a","a","a","c"]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 18:44:00 | 显示全部楼层    本楼为最佳答案   
l0stparadise 发表于 2020-3-7 18:36
我意思是为啥不返回["c","a","a","a","c"]

贪婪算法是一直算到不行,然后在退一个
举个例子
([abc])+ 去匹配 “abcd”
返回的是 c
原因
p表示遍历字符串下标
p=0 ‘a‘’ Ok
P=1 ‘b’ Ok
p=2 'c' Ok
P=3 'd' No
所以范围就是 匹配的字符串'abc'
但是你加了()表示从匹配的部分中选取,满足匹配[abc]
此时p=2 故返回 ‘c’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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