Пожалуйста, помогите мне узнать, является ли это ошибкой в Python (2.6.5), в моей компетенции при написании регулярных выражений или в моем понимании соответствия шаблонов.Greedy and Non-Greedy matching in Python re
(Я принимаю, что возможный ответ «Улучшайте 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
; Я подозреваю, что случайное инородное нажатие мешало.
Я собираюсь закрыть вопрос. Если тот, кто поддержал этот вопрос, хочет удалить свой голос, это справедливо.
Очень жаль.
Это поможет, если вы разместите строку, на которую вы ссылаетесь. –
с чем вы согласны? – SilentGhost
это может помочь разместить пример токена – Alan