-3

ここには2つの異なるテキスト形式があります。

"Submitted on Oct 1st, 2013"
"Not started" 

ステータスと日付を削除したい。

期待される結果は次のとおりです。

$status = "Submitted" or "Not started"
$date = "Oct 1st, 2013"

で行う方法Perl。どうもありがとう。

4

2 に答える 2

1

日付の前に常に「on」という単語があると仮定できる場合、これを実行するコードは次のとおりです。

#!/usr/bin/perl

use strict;
use warnings;

chomp(my $input = <STDIN>);

my $status = "Not started";
my $date;

if ($input =~ / on /) {
    $date = $';
    $status = "Submitted";
}

print "Status: $status\n";
if (defined $date) {
    print "Date: $date\n";
}
于 2013-10-05T00:46:15.867 に答える
1

単一の正規表現から始まるアプローチ。予期しない入力を処理します。

#!/usr/bin/perl -w

use strict;
use warnings;

my ($match, $status, $date);
foreach (<DATA>) {

    $_ =~ /^"(Submitted)(?: on )(.*)"|(Not started)"/;

    #         ^^^^^^^^^          ^^    ^^^^^^^^^^^
    #            $1              $2        $3

    if (defined $1) {
        ($match, $status, $date) = ("Y", $1, $2);
    } elsif (defined $3) {
        ($match, $status, $date) = ("Y", $3, "-");
    } else {
        ($match, $status, $date) = ("N", "-", "-");
    }

    print "[", join("][", ($match, $status, $date)), "]\n";
}

__DATA__
"Submitted on Oct 1st, 2013"
"Not a match!"
"Not started"

このプログラムは次の出力を生成します。

[Y][Submitted][Oct 1st, 2013]
[N][-][-]
[Y][Not started][-]
于 2013-10-05T02:52:40.980 に答える