一直理解有误,以为 正则里的 分支 『 | 』,比如 StatementA|StatementB,如果 StatementA 被匹配成功了,则 StatementB 不会被执行匹配过程,直接返回 StatementA 的结果。
而且,翻了下 Python 的文档,re 模块也是这么解释的:
A|B, When one pattern completely matches, that branch is accepted. This means that once A matches, B will not be tested further, even if it would produce a longer overall match. In other words, the '|' operator is never greedy.
然而今天发现上面这个说法是错的……
举例:
pattern1 = ’ reuglar|uglar ‘
pattern2 = ’ uglar|reuglar ‘
str =’ regular expression ‘
re.search(pattern1,str) # 返回 ['regular']
re.search(pattern2,str) # 还是返回 ['regular']
第二匹配 re.search(pattern2,str)
中按照错误的想法,先匹配 ’ uglar ‘,应该返回['uglar'],而真实的情况是:
’ uglar ‘ 匹配得到结果'uglar';'regular' 匹配,由于 字符串’ regular expression ‘ 中的 re 未被 consume,'regular' 依然能匹配成功,并返回 ['regular']
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.