У меня есть следующий повторно извлечь MAC-адрес:Python Regex соответствует MAC-адресу с конца?
re.sub(r'(\S{2,2})(?!$)\s*', r'\1:', '0x0000000000aa bb ccdd ee ff')
Однако это дало мне 0x:00:00:00:00:00:aa:bb:cc:dd:ee:ff
.
Как изменить это регулярное выражение для остановки после согласования первых 6 пар, начиная с конца, так что я получаю aa:bb:cc:dd:ee:ff
?
Примечание: в строке есть пробел между которыми следует игнорировать. Нужны только последние 12 символов.
Редактировать 1:re.findall(r'(\S{2})\s*(\S{2})\s*(\S{2})\s*(\S{2})\s*(\S{2})\s*(\S{2})\s*$',a)
находит последние 6 пар в строке. Я до сих пор не знаю, как сжать это регулярное выражение. Опять же это все еще зависит от того, что строки находятся в парах.
В идеале регулярное выражение должно взять последние 12 действительных \S
символов, начиная с конца и нанизывают с :
Edit2: Вдохновленный @Mariano ответ, который прекрасно работает, но зависит от того, что что последние 12 символов должен начинаться с пары. Я придумал следующее решение. Это kludgy, но все же, похоже, работает на все входы.
string = '0x0000000000a abb ccddeeff'
':'.join(''.join(i) for i in re.findall('(\S)\s*(\S)(?!(?:\s*\S\s*{11})',' string))
'aa:bb:cc:dd:ee:ff'
Edit3: @Mariano обновил свой ответ, который в настоящее время работает для всех входов
знак доллара, '$', представляет собой конец линии. Используйте это, чтобы выразить, что после 6 матчей вы хотите, чтобы линия заканчивалась. – Javier