Perl Arrays和grep

sno*_*kin 1 regex arrays perl grep text

我认为它更像是一个charachters,无论如何,我有一个文本文件,包括类似的东西:

COMPANY NAME

    City

    Addresss,
     Address number

    Email 

    phone number
Run Code Online (Sandbox Code Playgroud)

等等......(它重复自己,但是使用不同的数据...),让我们假设事物文本现在是$ strting变量.

我想要一个数组(@row),例如:

$row[0] = "COMPANY NAME";
$row[1] = "City";
$row[2] = "Addresss,
              Address number";
$row[3] = "Email";
$row[4] = "phone number";
Run Code Online (Sandbox Code Playgroud)

起初,我可以轻松地用grep完成这样的事情:1)@rwo = grep (/^^$/, $string); 不要开始!2)@row = grep (/\n/, $string);

仍然没有去,尝试也分裂等,仍然没有去.任何的想法?谢谢,

Dav*_*oss 6

FM已经给出了一个使用split工作的答案,但是我想指出,如果你从文件句柄中读取这些数据,Perl会非常容易.您需要做的就是将特殊变量$ /设置为空字符串.这使Perl进入"段落模式".在此模式下,文件输入操作符返回的每个记录将包含一段文本而不是通常的行.

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

local $/ = '';

my @row = <DATA>;

chomp @row;

print Dumper(\@row);

__DATA__
COMPANY NAME

City

Addresss,
 Address number

Email 

phone number
Run Code Online (Sandbox Code Playgroud)

输出是:

$ ./addr 
$VAR1 = [
          'COMPANY NAME',
          'City',
          'Addresss,
 Address number',
          'Email ',
          'phone number'
        ];
Run Code Online (Sandbox Code Playgroud)


FMc*_*FMc 5

我理解你的问题的方式,你想抓住至少一个空行分隔的项目.虽然/\n{2,}/在字面意义上是正确的(在一个或多个换行符上拆分),但我建议使用下面的正则表达式,因为它将处理几乎空行(仅包含空格字符的行).

use strict;
use warnings;

my $str = 'COMPANY NAME

City

Addresss,
 Address number

Email 

phone number';

my @items = split /\n\s*\n/, $str;
Run Code Online (Sandbox Code Playgroud)