Как вставить пробел между буквенным и цифровым символами? - PullRequest
2 голосов
/ 14 декабря 2010

Это продолжение моего первоначального вопроса: Perl - Как мне вставить пробел перед каждой заглавной буквой, кроме первого вхождения или существующего?

Мне удалось достичьжелаемый результат вставки пробелов между заглавными буквами с только буквами в строке:

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 входит в текст Nogo

Желаемый:

Примерно 440 Верблюд 220 вводит 100 текст Nogo

Итак, как мне теперь вставить пробел между буквами и цифрами?.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Измените первую замену на:

$camel =~ s/(?<=[a-z])(?=[A-Z0-9])|(?<=[0-9])(?=[A-Z])/ /g;

См. Также perldoc perlre .

0 голосов
/ 14 декабря 2010

Продолжая с прошлой ночи, решение 5.10+,

$camel =~ s/(?:\p{Lu}\p{Ll}*+|[0-9]++)(?!\W)\K/ /g;

С помощью свойств \ p {} [1], которые tchrist заставил меня снова открыть :) Это в основном то же решение, что и в прошлый раз, но теперь мы проверяем и цифры.

1: http://perldoc.perl.org/perluniprops.html#Properties-accessible-through-\p{}-and-\P{}

0 голосов
/ 14 декабря 2010

Добавьте следующие две замены:

$camel =~ s/(?<=[0-9])(?=[a-z])/ /ig;
$camel =~ s/(?<=[a-z])(?=[0-9])/ /ig;

Первый вставляет пробел при любом переходе между цифрой и буквой.Модификатор i в конце делает выражение нечувствительным к регистру.Второй делает наоборот.

...