我有以下类型的文字文件
helllo
worlsadas
asdfdfsgf
eqweqqweq
asdsadsadsa
asdas
dsgfv
zczcxzfada
asdsadas
asd
safdfgdsg
asdsada
....
因此,在有用文本的每个部分之间有两个空行。我需要提取每个部分的文本部分,例如数组或哈希(现在它并不重要)。
最可接受的方法是什么?我有一些想法:
使用正则表达式提取一个条目^\n\n(.*\n){1,5}\n\n
,但在那里
这里的两个问题首先是文本文件没有两个新文件
行,以及如何获取一个表达式中的所有条目或我必须
在前面的正则表达式的帮助下读取8行而不是提取代码。
只需逐行读取文件,然后每8行做一些东西。
您的变体
请建议正确的方式来执行此操作,我是新手,所以也许有更方便的方法来做到这一点 我将不胜感激任何帮助。
答案 0 :(得分:1)
参考perldoc perlvar
。在perl中指定字段分隔符将允许您这样做:
#!/usr/perl/bin
use strict;
use warnings;
{
local $/ = "\n\n";
my $count = 1;
while (my $chunk = <DATA>) {
print "Chunk:", $count++, "\n";
#if you want to remove the delimiters
$chunk =~ s/(^|\n)\n//g;
print $chunk;
}
}
__DATA__
helllo
worlsadas
asdfdfsgf
eqweqqweq
asdsadsadsa
asdas
dsgfv
zczcxzfada
asdsadas
asd
safdfgdsg
asdsada
这将打印:
Chunk:1
helllo
worlsadas
asdfdfsgf
eqweqqweq
Chunk:2
asdsadsadsa
asdas
dsgfv
zczcxzfada
Chunk:3
asdsadas
asd
safdfgdsg
asdsada
答案 1 :(得分:0)
我需要提取每个部分的文本部分,例如数组或哈希(现在没关系)。
((?:(?!\n\n).)+)
试试这个。抓住each text
的群组。参见演示。
答案 2 :(得分:0)
拆分是一个很好的选择,使用这样的东西 需要2个或更多伪空白行。
\n(?:\s*\n){2,}
格式化:
\n (?: \s* \n ){2,}
答案 3 :(得分:-1)
您可以使用这样的简单正则表达式拆分文本:
\s\s+
<强> Working demo 强>
我不知道perl,但是你可以在PHP中使用这段代码:
<强> Online code 强>
$input = "helllo
worlsadas
asdfdfsgf
eqweqqweq
asdsadsadsa
asdas
dsgfv
zczcxzfada
asdsadas
asd
safdfgdsg
asdsada"
print_r(preg_split('/\s\s+/', $input));
输出:
Array
(
[0] => helllo
worlsadas
asdfdfsgf
eqweqqweq
[1] => asdsadsadsa
asdas
dsgfv
zczcxzfada
[2] => asdsadas
asd
safdfgdsg
asdsada
)
我认为你可以在Perl中做同样的事情:
split(/\s\s+/, $input);