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);
仍然没有去,尝试也分裂等,仍然没有去.任何的想法?谢谢,
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)
我理解你的问题的方式,你想抓住至少一个空行分隔的项目.虽然/\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)