-7

示されているように、入力テキスト ファイルinput.txtがあります。

a,2,3*b,4,5*c,7,3*

次のように数字を印刷する必要があります

a,2,3
b,4,5
c,7,3
4

6 に答える 6

4

なぜ正規表現が役立つと思いますか? やるだけのほうがはるかに簡単

tr '*' '\n' <input.txt

Perl ソリューションが必要な場合は、

perl -pe 'y/*/\n/' input.txt
于 2013-06-07T07:50:25.660 に答える
1

これには分割を使用できます。

 my $string = "a,2,3*b,4,5*c,7,3*";

 my @substr = split(/\*/, $string);

{
  local $, = "\n";
  print @substr;
}

出力:

a,2,3
b,4,5
c,7,3
于 2013-06-07T08:33:29.513 に答える
1

入力には、*?で区切られたレコードがあります。入力レコード区切り をその値に設定でき$/ます!

local $/ = "*";
while (<>) {
  chomp;
  print $_, "\n";
}

ワンライナーとしての例:

$ printf 'a,2,3*b,4,5*c,7,3*' | perl -lpe'BEGIN{$/="*"}'
a,2,3
b,4,5
c,7,3

(入力を-l自動chomp化し、出力セパレーターを出力に追加します。-p入力のすべてのレコードをループし、コードを実行し、 の値を出力します$_。行自体は処理せず、レコードセパレーターを から*に変更するだけ\nです。 )

元のデータに改行が含まれていない限り、これは正常に機能します。改行は変更されずに渡されます。s/\n//g代替品はそれを大部分解決します。

于 2013-06-07T08:31:15.373 に答える
0

$string =~ s/\*/\n/g;すべての置換をインラインで行う必要があります

于 2013-06-07T12:41:22.337 に答える
0

これも試すことができます:

 my $data = "a,2,3*b,4,5*c,7,3*";
 my $data2 = substr($data, 0, LengthOfSampleInputStringHere - 1);
 my @values = split('*',$data2);

 # Print and verify (Optional)
 foreach my $val (@values) 
 {
    print "${val}\n";
 }

編集

次の正規表現も使用できます。

/([^\*]+)/
于 2013-06-07T09:14:21.397 に答える