Есть ли способ сделать это без написания мини-парсера? Я думаю, что ответ - нет. Но написание парсера не так уж сложно. Я должен был сделать это некоторое время назад, чтобы отсортировать номера акций нашей компании. В основном просто отсканируйте число и превратите его в массив. Проверьте «тип» каждого символа: альфа, число, возможно, у вас есть другие, с которыми вам нужно иметь дело со спец. Как будто я должен был обращаться с дефисами особенным, потому что мы хотели, чтобы A-B-C сортировал до AB-A. Тогда начните отдирать персонажей. Пока они того же типа, что и первый персонаж, они попадают в одно и то же ведро. Как только тип меняется, вы начинаете помещать их в другое ведро. Тогда вам также понадобится функция сравнения, которая сравнивает ведро за ведром. Когда оба сегмента альфа, вы просто делаете нормальное альфа сравнение. Когда оба являются цифрами, преобразуйте оба в целое число и выполните целочисленное сравнение или добавьте более короткую к длине более длинного или что-то эквивалентное. Когда они разных типов, вам нужно правило для их сравнения, например, A-A идет до или после A-1?
Это не тривиальная работа, и вы должны придумать правила для всех странных случаев, которые могут возникнуть, но я думаю, вы могли бы собраться вместе за несколько часов работы.