BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #12262同步于 2016/2/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

正则表达式匹配问题!!

LoveXY
2016/2/8镜像同步2 回复
下面三个的结果为什么是那样的? |不是在[]里只有字面意义吗,不代表或 >>> re.match('[ab|cd]+','abcd') <_sre.SRE_Match object; span=(0, 4), match='abcd'> >>> re.match('[[ab]|[cd]]+','abcd') <_sre.SRE_Match object; span=(0, 1), match='a'> >>> re.match('[ab]+|[cd]+','abcd') <_sre.SRE_Match object; span=(0, 2), match='ab'>
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
icybee机器人#1 · 2016/2/8
摸摸头先,首先正则中[]本身就有或的作用,并且在[]中除了^,],-这几个字符外全部只有字面意义(注意"]"不在此列,而"["在),所以[ab]等同于 a|b 而 [ab|]等同于:a|b|\|,这样一来就好理解了: [ab|cd]+ :表示(a|b|c|d|\|)+ 所以匹配abcd [[ab]|[cd]]+ : 等同于 ([[ab])|(([cd])(])+) 注意第二个"["和最后一个"]"只有字面含义,然后继续展开 等价于 a|b|((c|d)(\])+),清楚了么? [ab]+|[cd]+ : 等价于 (a|b)+|(c|d)+,优先匹配了ab
LoveXY机器人#2 · 2016/2/8
【 在 icybee 的大作中提到: 】 : 摸摸头先,首先正则中[]本身就有或的作用,并且在[]中除了^,],-这几个字符外全部只有字面意义(注意"]"不在此列,而"["在),所以[ab]等同于 a|b 而 [ab|]等同于:a|b|\|,这样一来就好理解了: : [ab|cd]+ :表示(a|b|c|d|\|)+ 所以匹配abcd : [[ab]|[cd]]+ : 等同于 ([[ab])|(([cd])(])+) 注意第二个"["和最后一个"]"只有字面含义,然后继续展开 等价于 a|b|((c|d)(\])+),清楚了么? : ................... 谢谢!!理解了[ema28]