2

次のタイプの文字列があります(引用符は、それらがすべて1行にあることを示しています):

「AMINO-2,4,6-TRIIODOBENZOIC ACIDS Hugo Holtermann、Baerum、Leif Gunnar Haugen、オスロ、および Knut Wille、Baerum、ノルウェー、Nye-5 の譲渡者」

「エチレン化合物の製造方法 Duncan Clark and Percy Hayden, Norton-on-Tees, England, ImperiaI Chemical Industries Limited, London, England への譲渡人」

タイトル以降(すべて大文字になっている部分)をすべて取得したい。だから私は取得したいと思います:

"Hugo Holtermann, Baerum, Leif Gunnar Haugen, Oslo, and Knut Wille, Baerum, Norway, assignors to Nye-5"

「Duncan Clark および Percy Hayden、Norton-on-Tees、England、ImperiaI Chemical Industries Limited、London、England への譲渡人」

これら 2 つよりも多くの文字列がありますが、基本的な書式設定は、発明のタイトルが常に大文字と数字であるということです。

perlの正規表現でこれを行う方法はありますか?

4

5 に答える 5

1

100% 正確である必要がない場合は、最初の大文字とそれに続く最初の小文字を探して、残りの行を取得します。

このようなもの (私の perl は少し錆びているので、構文エラーは許してください):

$part_of_line = $full_line =~/([A-Z][a-z].*)/

于 2012-05-14T06:48:58.527 に答える
0

これを試して:

$text = "PROCESS FOR THE PRODUCTION OF ETHYLENIC COMPOUNDS Duncan Clark and Percy Hayden, Norton-on-Tees, Eng- 5 land, assignors to ImperiaI Chemical Industries Limited, London, England ";

if($text =~ m/(\b[A-Z0-9-, ]+)\b(.*)/) {
    print "$2";
}
于 2012-05-14T06:48:23.103 に答える
0

どうですか:

#!/usr/bin/perl
use strict;
use warnings;
use 5.014;

my $re = qr
    /^                # Start of string
    [\p{Lu}\pN, -]+   # one or more uppercase letter or number or comma or space or dash
    (                 # start group 1
      \p{Lu}[\pL.']   # one uppercase letter followed by any letter or dot or apostroph
    )                 # end group
    /x;
while(<DATA>) {
    chomp;
    s/$re/$1/g;       # replace match by group 1
    say;
}


__DATA__
AMINO-2,4,6-TRIIODOBENZOIC ACIDS Hugo Holtermann, Baerum, Leif Gunnar Haugen, Oslo, and Knut Wille, Baerum, Norway, assignors to Nye- 5
PROCESS FOR THE PRODUCTION OF ETHYLENIC COMPOUNDS Duncan Clark and Percy Hayden, Norton-on-Tees, Eng- 5 land, assignors to ImperiaI Chemical Industries Limited, London, England
PROCESS FOR THE PRODUCTION OF ETHYLENIC COMPOUNDS D.Clark
PROCESS FOR THE PRODUCTION OF ETHYLENIC COMPOUNDS O'Connors

出力:

Hugo Holtermann, Baerum, Leif Gunnar Haugen, Oslo, and Knut Wille, Baerum, Norway, assignors to Nye- 5
Duncan Clark and Percy Hayden, Norton-on-Tees, Eng- 5 land, assignors to ImperiaI Chemical Industries Limited, London, England
D.Clark
O'Connors
于 2012-05-14T17:27:56.290 に答える
0

タイトルは常に大文字とスペースで終わるため、これは機能するはずです。

/^.+[A-Z]+ (.+)$/;
print $1;
于 2012-05-14T10:51:48.117 に答える
0

私はこれを試してみましたが、あなたが期待していた出力を得ました

if($ip =~ m/([A-Z0-9,\- ]+)([A-Z]+[a-z]+.*)/)
{
      print "$2";
}
于 2012-05-14T06:53:52.803 に答える