8

Id、Name、start date、end date、Age、Description、および Location 列を含むサンプル入力ファイルを次のように作成します。

220;John;23/11/2008;22/12/2008;28;Working as a professor in University;Hyderabad
221;Paul;30;23/11/2008;22/12/2008;He is a software engineer at MNC;Bangalore
222;Emma;23/11/2008;22/12/200825;Working as a mechanical engineer;Chennai

30 行のデータが含まれています。私の要件は、上記のテキスト ファイルから説明のみを抽出することです。

私の出力には含まれているはずです

大学で教授として働く

彼は MNC のソフトウェア エンジニアです。

機械エンジニアとして働く

Descriptionを抽出するための正規表現を探す必要があり、いろいろ試してみましたが解決できませんでした。どうすればいいですか?

4

4 に答える 4

22

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

[^;]+(?=;[^;]*$)

[^;]を除く任意の文字に一致;

+先行する文字またはグループに 1 回から複数回一致する量指定子です

*直前の文字またはグループ 0 から何度も一致する量指定子です

$文字列の終わりです

(?=pattern)特定のパターンが先に発生するかどうかをチェックする先読みです

于 2013-02-19T05:27:04.493 に答える
5

/^(?:[^;]+;){3}([^;]+)/セミコロン間の 4 番目のグループを取得します。

私のコメントで述べたように、文字列をセミコロンで分割し、分割の 4 番目の要素を取得する必要があります...これが区切りファイルの要点です。複雑なパターン マッチングは必要ありません。

入力例を使用した Perl での実装例:

open(my $IN, "<input.txt") or die $!;

while(<$IN>){
    (my $desc) = $_ =~ /^(?:[^;]+;){3}([^;]+)/;
    print "'$desc'\n";
}
close $IN;

収量:

'Working as a professor in University'
'He is a software engineer at MNC'
'Working as a mechanical engineer'
于 2013-02-19T05:13:33.070 に答える
0

これはうまくいくはずです:

/^[^\s]+\s+[^\s]+\s+[^\s]+\s+(.+)\s+[^\s]+$/m

または、孤独な羊飼いが指摘したように

/^\S+\s+\S+\s+\S+\s+(.+)\s+\S+$/m

またはセミコロン付き:

/^[^;]+;[^;]+;+[^;]+;+(.+);+[^;]+$/m
于 2013-02-19T05:01:51.143 に答える