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 は Entering100Text 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

昨夜に引き続き、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 に答える
0

次の 2 つの置換を追加します。

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

1 つ目は、数字と文字の間の任意の遷移にスペースを挿入します。i末尾の修飾子により、式の大文字と小文字が区別されなくなります。2番目はその逆です。

于 2010-12-14T14:09:02.667 に答える