如何在字母字符和数字字符之间插入空格?

时间:2010-12-14 13:56:59

标签: regex perl space

这是我原来问题的延续: 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

那么,我现在如何在字母和数字之间插入一个空格?

2 个答案:

答案 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 {}