请帮助我发现这是否是 Python (2.6.5) 中的错误,是我编写正则表达式的能力,还是我对模式匹配的理解。
(我接受一个可能的答案是“升级你的 Python”。)
我正在尝试解析 Yubikey 令牌,允许使用可选的附加功能。
当我使用此正则表达式匹配没有任何可选附加项的令牌时(即,仅包含与两个捕获组匹配的内容),匹配失败:
r'^\t?[^a-z0-9]?([cbdefghijklnrtuv1-8]{0,32})\t?([cbdefghijklnrtuv1-8]{32})\t?\r?\n?$'
但是,如果我让第一组不贪婪:
r'^\t?[^a-z0-9]?([cbdefghijklnrtuv1-8]{0,32}?)\t?([cbdefghijklnrtuv1-8]{32})\t?\r?\n?$'
它成功了。
所以,好的,它正在工作,但我原以为这两个正则表达式之间最终结果的唯一区别是性能。
Expresso 和 Regex Coach 都喜欢这两种模式。
我错过了什么?
这是我正在测试的两个字符串。
没有可选的附加功能(可能失败的附加功能):
"vvbrentlnccnhgfgrtetilbvckjcegblehfvbihrdcui"
带有可选的附加功能(到目前为止还没有失败;实际的选项卡在此处显示为“_”):
"_!_8R5Gkruvfgheufhcnhllchgrfiutujfh_"
"_!1U4Knivdgvkfthrd_brvejhudrdnbunellrjjkkccfnggbdng_"
我尝试使用 Alex Martelli 的建议来重现它,并且它在原始 Python 环境中不会失败,所以我将重新访问我的代码(我实际上是在 yubikey-python 上进行黑客攻击);我会在一天左右回来报告。
我向大家道歉。我无法重现该问题。getpass
当它发生时,我正在通过;读取输入。我怀疑意外的外键击中了。
我要结束这个问题。如果支持该问题的人希望取消他们的投票,那是公平的。
很抱歉。