次のような文字列があります。
trn_425374_1_94_-
trn_12_1_200_+
trn_2003_2_198_+
そして、次のように、最初の数字の後にすべてを分割したい:
trn_425374
trn_12
trn_2003
次のコードを試しました:
$string =~ s/(?<=trn_\d)\d+//gi;
ただし、入力と同じものを返します。同様の質問の例に従っていますが、何が間違っているのかわかりません。なにか提案を?
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;