[Perl 5.8.8]Perl: как сделать компактное имя из пронумерованной последовательности
У меня есть последовательность имен вещей, как:
names='foobar1304,foobar1305,foobar1306,foobar1307'
где имена отличаются только прилежащей строкой цифр где-то в названии. Строки цифр в любой последовательности имеют одинаковую длину, а строки цифр образуют непрерывную числовую последовательность без пропусков, например. 003,004,005
.
Я хочу компактное представление, как:
compact_name='foobar1304-7'
(. Компактная форма это просто имя, так что точная форма является предметом переговоров) Там, как правило, только < 10 вещей, хотя некоторые наборы могли бы охватывать десятилетие, например
'foobaz2205-11'
Есть ли какой-нибудь краткий способ сделать это в perl? Я не большой Perl хакера, так что немного нежного ...
бонусные баллы для обработки встроенных последовательностей, как:
names='foobar33-pqq,foobar34-pqq,foobar35-pqq'
Идеальный сценарий будет аккуратно падать обратно 'firstname2301-lastname9922'
в случае она может» t идентифицировать последовательность в именах.
Этот вопрос недоопределен. Вам нужно разработать набор правил, которые обрабатывают все возможные входы. Для вашего последнего примера подразумеваемое упрощение 'foobar33-35-pqq' может оказаться неоднозначным в контексте. Основная идея извлечения числа и коллапсирующих последовательностей довольно проста, учитывая возможности регулярных выражений Perl, но ваша большая проблема решает, что вы на самом деле хотите сделать. –
фиксированный, думаю. Я не вижу двусмысленности в 'foobar33-35-pqq'. Примечание. Я указал, что «** a ** непрерывная строка цифр». Если в названии есть несколько строк цифр, я просто заступлю. –
Я думаю, что вы хотите разбить строку на массив ('@list = split (", ", $ names)' или что-то подобное), затем найдите [самый длинный общий префикс] (http://stackoverflow.com/questions/9114402/regexp-find-longest-common-prefix-of-two-strings) этих слов в массиве. Бонусные баллы за поиск самого длинного общего суффикса. Таким образом, вы разделяете слова на префикс, переменную часть и суффикс. Тогда ваш ответ «$ prefix $ varFirst». «-». "$ VarLast $ Суффикс". Звучит ли это правильно? –