1

次のような文字列があります。

trn_425374_1_94_-
trn_12_1_200_+
trn_2003_2_198_+

そして、次のように、最初の数字の後にすべてを分割したい:

trn_425374
trn_12
trn_2003

次のコードを試しました:

$string =~ s/(?<=trn_\d)\d+//gi;

ただし、入力と同じものを返します。同様の質問の例に従っていますが、何が間違っているのかわかりません。なにか提案を?

4

4 に答える 4

3

Perl 5 バージョン 10 以降を実行している場合は、\K("keep") 正規表現エスケープにアクセスできます。の前のすべて\Kが置換から除外されるため、最初の一連の数字の後のすべてが削除されます (改行を除く)。

s/\d+\K.+//;

以前のバージョンの Perl では、保持したい文字列の一部をキャプチャし、置換で置き換える必要があります。

s/(\D*\d+).+/$1/;

どちらも末尾の改行文字を削除しないことに注意してください。それらも削除したい場合は、最初に文字列を削除するか、次のように修飾子を置換にchomp追加します/s

s/\d+\K.+//s;

また

s/(\D*\d+).+/$1/s;
于 2013-08-03T12:31:52.230 に答える