2

这是我原来的问题的延续: 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正在输入100Text Nogo

期望:

一些440骆驼220正在输入100文本Nogo

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

4

3 回答 3

3

将第一个替换更改为:

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

另请参阅perldoc perlre

于 2010-12-14T14:10:51.010 回答
0

添加以下两个替换:

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

第一个在数字和字母之间的任何过渡处插入一个空格。最后的i修饰符使表达式不区分大小写。第二个则相反。

于 2010-12-14T14:09:02.667 回答
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{}-and-\P{}

于 2010-12-14T15:28:56.460 回答