一个正则表达式的坑……分支 |

2019-08-06 19:17:20 +08:00
 Rorysky

一直理解有误,以为 正则里的 分支 『 | 』,比如 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']

2937 次点击
所在节点    正则表达式
2 条回复
Rorysky
2019-08-06 19:42:35 +08:00
"completely matches" means matching to the end of the string...
Rorysky
2019-08-27 17:16:24 +08:00
@livid 大大,我是不是被降权了,刚发的帖子,找都找不到……

求给个改过自新的机会!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX