3

次のような行を含むファイルがあるとします。

"7sunrIsEfoo"
"10ecological09"
"3bedtime"

各行は、番号 n を表す数字で始まります。それに続くn文字を一致させたい。出力は次のようになります。

sunrIsE
ecological
bed

正規表現を使用してこれを行う方法はありますか? 私の最初の試みは:

([0-9]*)[a-zA-Z]{\1}

しかし、うまくいかないようです。

4

4 に答える 4

4

それは正規表現では不可能です。

([0-9]*)数字を部分文字列として「記憶」するだけです。数値として使用することはできません。

于 2011-05-20T09:25:14.457 に答える
2

Ruby では、以下を使用できます。

result = string[/(\d+)([a-zA-Z]+)/,2][0,$1.to_i]

期待どおりの結果が得られます。

于 2011-05-20T09:32:30.667 に答える
0

正規表現はこのタスクにはあまり適していません。彼らは数を解釈する方法を構築していません。を使用して(厄介な)回避策を使用できます

(?<=1).|(?<=2)..|(?<=3)...| 

など(逆の順序を使用する方がよいですが、そうしないと、11に到達したときに問題が発生します)。本当に他に方法がない場合を除いて、この方法を使用しないでください=)

于 2011-05-20T09:30:33.340 に答える
0

これを Perl で行う方法を次に示します。

#!/usr/local/bin/perl
use strict;
use warnings;

my @list = ("7sunrIsEfoo", "10ecological09", "3bedtime");
foreach(@list) {
    s/^(\d+)(.+)$/substr($2, 0, $1)/e;
    print $_,"\n";
}

出力:

sunrIsE
ecological
bed
于 2011-05-20T09:53:02.680 に答える