请帮助我发现这是Python(2.6.5)中的一个bug,还是我编写regex的能力,还是我对模式匹配的理解。在
(我承认一个可能的答案是“升级你的Python”。)
我正在尝试解析一个Yubikey令牌,允许可选的附加值。在
当我使用此正则表达式匹配没有任何可选附加项(即,只包含与两个捕获组匹配的内容)的令牌时,匹配失败:
r'^\t?[^a-z0-9]?([cbdefghijklnrtuv1-8]{0,32})\t?([cbdefghijklnrtuv1-8]{32})\t?\r?\n?$'
但是,如果我使第一组非贪婪:
^{pr2}$它成功了。在
所以,好吧,这是有效的,但我认为这两个正则表达式的最终结果的唯一区别是性能。在
Expresso和Regex Coach都喜欢这两种模式。在
我错过了什么?在
这是我正在测试的两条弦。在
没有可选的附加功能(可能失败的):
"vvbrentlnccnhgfgrtetilbvckjcegblehfvbihrdcui"
使用可选的附加功能(到目前为止还没有失败;实际的选项卡显示为“\”):
"_!_8R5Gkruvfgheufhcnhllchgrfiutujfh_"
"_!1U4Knivdgvkfthrd_brvejhudrdnbunellrjjkkccfnggbdng_"
我试着用Alex Martelli的建议来复制它,它在原始Python环境中不会失败,所以我将重新访问我的代码(我实际上是在用yubikey Python进行黑客攻击);我将在大约一天之后报告。在
我向大家道歉。我不能重现这个问题。当它发生时,我正在通过getpass
读取输入;我怀疑是一个意外的外来击键妨碍了我。在
我要结束这个问题。如果投赞成票的人希望取消他们的投票,那是公平的。在
非常抱歉。在
你是对的:仅仅从贪婪量词切换到非贪婪量词不应该导致正则表达式停止工作。它可以改变正则表达式匹配(或不匹配)的速度,它匹配多少多以及在哪些组中捕获哪些部分,仅此而已。在
(下面的“解决方案”不适用,但该问题仍然不表示正在执行不区分大小写的匹配,因此我将保留它。)
您的问题是,带有可选extra的字符串中也有大写字母,而regex只允许小写字母。在前面或正则表达式上粘贴
(?i)
,它就可以正常工作了。在我建议使用yubikey-python来实现Python与yubikey的接口,但是,这是一个附带的问题(严格来说是实际问题;-)。在
从理论上讲,不应该出现贪婪和非贪婪之间的选择导致RE在一种情况下匹配,而在另一种情况下失败,它只会影响匹配的内容(正如您提到的性能),而不是匹配是否成功,因为REs应该为此目的进行回溯。在
问题是,我无法重现这个问题我手头没有yubikey,并且this file中的测试显示两个REs的匹配/不匹配行为之间没有差异。在
你能不能发几个失败的例子(其中一个匹配,另一个不匹配),理想的方法是编辑你的问题,这样我就可以重现这个问题,并尽量把它减少到最小程度?听起来可能有一个重新错误,但没有可复制的情况下,我不能检查它是否和何时被修复,已经报告,或什么。谢谢!在
编辑OP现在发布了一个失败的例子,但我仍然无法重现:
也就是说,match在这两种情况下都能成功,这与OP使用的2.6.5python版本完全相同。OP,pls,展示一下这个简单的命令序列在你的平台上的结果,告诉我们这个平台到底是什么,因为它看起来像是一个奇怪的平台相关bug。。。谢谢!在
相关问题 更多 >
编程相关推荐