Это продолжение моего первоначального вопроса: Perl- How do I insert a space before each capital letter except for the first occurrence or existing?Как вставить пробел между буквенным символом и числовым символом?
я смог достичь желаемого результата вставки пробелов между колпачками только с буквами в строке:
my $camel ="SomeCamel IsEnteringText";
$camel =~ s/(?<=[a-z])(?=[A-Z])/ /g;
$camel =~ s/([^[:space:]]+)/\u$1/g;
Печатает:
Некоторые данные верблюда Ввод текста
Но, когда число присутствуют, я столкнулся с вопросами:
my $camel ="Some 440Camel220 IsEntering100Text Nogo";
$camel =~ s/(?<=[a-z])(?=[A-Z])/ /g;
$camel =~ s/([^[:space:]]+)/\u$1/g;
Печатает:
Некоторые 440Camel220 Is Entering100Text Nogo
Желаемая:
Некоторые 440 Camel 220 Ввод 100 Текст Nogo
Итак, как мне теперь вставить пробел между буквами и цифрами ?.
Я проголосовал за это как ответ, потому что мне нужно использовать только две строки, а не четыре, чтобы получить желаемый результат. Хотя я должен признать, что я все еще работаю над тем, что происходит там! – DulcimerDude
Он в основном делает то же самое, что и мой ответ. Первая половина группировки (разделенная символом '|') соответствует переходу между строчными буквами и буквами верхнего регистра или цифрами, а вторая половина соответствует переходу между числами и прописными буквами. Эта версия не превратит 'a440' в' a 440'; моя воля. Я не знаю, если это имеет значение. Я также считаю, что внешняя '(?: ...)' не нужна. На самом деле в этом выражении он ничего не делает. – mkb
Я должен потратить немного времени и обмотать голову вокруг этого. Я думаю, что немного понимаю. Я собираюсь поиграть с этим, пока я не смогу написать сам (за исключением замены одного персонажа)! Еще раз спасибо ... – DulcimerDude