返回信息流下面三个的结果为什么是那样的? |不是在[]里只有字面意义吗,不代表或
>>> 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'>
这是一条镜像帖。来源:北邮人论坛 / python / #12262同步于 2016/2/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
正则表达式匹配问题!!
LoveXY
2016/2/8镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
摸摸头先,首先正则中[]本身就有或的作用,并且在[]中除了^,],-这几个字符外全部只有字面意义(注意"]"不在此列,而"["在),所以[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
【 在 icybee 的大作中提到: 】
: 摸摸头先,首先正则中[]本身就有或的作用,并且在[]中除了^,],-这几个字符外全部只有字面意义(注意"]"不在此列,而"["在),所以[ab]等同于 a|b 而 [ab|]等同于:a|b|\|,这样一来就好理解了:
: [ab|cd]+ :表示(a|b|c|d|\|)+ 所以匹配abcd
: [[ab]|[cd]]+ : 等同于 ([[ab])|(([cd])(])+) 注意第二个"["和最后一个"]"只有字面含义,然后继续展开 等价于 a|b|((c|d)(\])+),清楚了么?
: ...................
谢谢!!理解了[ema28]