这是我原来问题的延续: 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正在输入100Text Nogo
所需:
大约440骆驼220正在进入100个文本Nogo
那么,我现在如何在字母和数字之间插入一个空格?
答案 0 :(得分:0)
添加以下两个替换:
$camel =~ s/(?<=[0-9])(?=[a-z])/ /ig;
$camel =~ s/(?<=[a-z])(?=[0-9])/ /ig;
第一个在数字和字母之间的任何过渡处插入空格。最后的i
修饰符使表达式不区分大小写。第二种情况正好相反。
答案 1 :(得分:0)
从昨晚开始,一个5.10 +解决方案,
$camel =~ s/(?:\p{Lu}\p{Ll}*+|[0-9]++)(?!\W)\K/ /g;
使用tchrist让我重新发现的\ p {}属性[1]:)它与上次基本相同,但现在我们也检查数字。
1:http://perldoc.perl.org/perluniprops.html#Properties-accessible-through- \ p {} - 和 - \ P {}