我有一些数据需要解析,它在多行上。我想在某一行上创建一个类似于结构的表格。数据各不相同。有些在一条以上的线路上分解,有些仅仅是两条线路。多行匹配和解析
示例数据
方案1:
Start Anchor - First parse boundary
Name1 - Only one line of name
12345 - Number line needed
ending anchor - End parse boundary
data
data
data
方案2:
Start Anchor
name1 - Two lines of name.
name2
12345987
ending anchor
data
data
data
期望结果
方案1:
Name1 12345
data
data
data
方案2:
name1 name2 12345987
data
data
data
说明
因此,在这种数据,我需要在同一行上的名称或名称及其相应的编号。我想替换\n
以了解解析边界之间的内容,同时保留其余的数据。
我目前的结果
方案1:
name1 12345987 - easy because only 1 line of name
data
data
方案2:
name1 name2 - tough part
12345987
data
data
代码
my $text = read_file('list_2.txt');
use File::Slurp;
$text =~ s/^Start Anchor\n(.*?)\n(.*?)ending anchor/$1 $2/gism;
print $text;
print;
在我眼里,$1
变量应该被捕获,因为使用的结束锚的姓名(或名称)。变量$2
应该捕获该数字,因为它始终位于结束锚点的上方一行。
因此,嵌套循环说明是否有一个起始锚点,它有一个结束锚点chomp或删除它们之间的所有内容的新行。然后打印整行并返回,否则按原样打印。 @Borodin – JDE876 2014-09-30 18:30:14
@ JDE876:是的。只需复制行,直到找到起始锚;读取线条并将它们推到'@ name'上,直到结束锚点转向;在一行中打印“@ name”的内容,将其清空,然后继续复制。 – Borodin 2014-09-30 18:37:03