При попытке выполнить некоторое регулярное выражение в python я наткнулся на странность. Я хотел сопоставить десятичные числа в форме xxx.yyy и разделить их на три группы для дальнейшей обработки. Я выполнил что-то вроде следующего фрагмента.Python regex не достаточно жадный, несколько групп
#!/usr/bin/env python3
import re
matches = re.search("a=(\d+)(\.?)(\d+?)", "var k = 2;var a; a=46")
print(matches.group(1))
Печать возвращает 4, тогда как 46 будет ожидаемым результатом. Почему это так? Документация на Python гласит, что regexp + и * являются жадными, но, похоже, это не так. Причина в том, что последняя цифра заканчивается в последней группе. Мне нужно как минимум совместить первую и последнюю группу. Я мог бы пропустить среднюю группу, если я использую последнее, чтобы различать десятичные и не десятичные числа.
Однако, как представляется, это работает, если число соответствует десятичному значению.
#!/usr/bin/env python3
import re
matches = re.search("a=(\d+)(\.?)(\d+?)", "var k = 2;var a; a=46.3")
print(matches.group(1))
Отпечатки 46. Я был бы очень рад, если бы вы помогли мне решить эту головоломку. Спасибо.
Сделал некоторую оценку, и я считаю, что этот ответ ближе всего к тому, чего я хотел достичь. Спасибо, @ Даниэль. – Fakenick