1

正規表現を使用して、タブ区切りのテキスト ファイルから特定のテキストを「抽出」し、以下のファイルに対して操作を実行する方法を見つけようとしています。

次の形式のファイルがあります。

#HEADER_IGNORE        HEADING1     HEADING2      HEADINGN
Some Text Here        value        value2        value3
SOME_TEXTHERE         x                          z
Some More Text Here   A            B             

そして、最初の「列」を抽出できるようにしたいです。基本的に、正規表現で抽出できるように、最初のタブの前にあるすべてのテキストを取得したいと考えています。

Some Text Here
SOME_TEXTHERE
Some More Text Here

次の正規表現を使用しようとしましたが、うまくいきませんでした。

/(\W\s)*\t$/

2 番目にできるようにしたいことは、行 x 列の参照に値がないかどうかを確認することです。つまり、上記のサンプル ファイルでは、行 IDSOME_TEXTHEREに の値がありませんHEADING2。任意の数の行 ID と列が存在する場合があります。

前もって感謝します!

4

2 に答える 2

1

古典的な方法は、chomp各行から行末記号を削除してからsplit /\t/、すべてのフィールド値のリストを抽出することです。

chomp;
my @fields = split /\t/;
my $field1 = $fields[0];

ただし、最初の列だけが必要であることが確実な場合は、行頭にあるタブ以外のすべての文字を見つけるのが最も簡単です。

my ($field1) = /\A([^\t]+)/;

2 番目の要件を考えると、最初の要件が最適です。「欠損値」の意味によって異なりますが、すべてのタブ区切り記号がある限り、次のように記述して、行に指定された数のフィールドがあることを確認できます

my $n = grep /\S/, @fields;
warn "Missing field" unless $n == 4;

または、欠落しているフィールドを見つけたい場合は、

my @missing = map { $fields[$_-1] !~ /\S/ } 1 .. 4;
warn "Missing field $missing[0]" if @missing;
于 2013-10-09T21:36:42.443 に答える