Regex Perl从大文本块导出/解析数据

Regex Perl从大文本块导出/解析数据,regex,perl,parsing,export,Regex,Perl,Parsing,Export,我试图从一大块连续文本中导出特定数据。我知道PERL是为做这样的事情而设计的。 从互联网上的例子,包括在这里,我有一些线索如何去做,但我无法携带或修改的东西立即跨越我的问题 我相信我所做的很简单 示例原始数据(rawdata.txt)如下所示: <id>0001</id><first name>John</first name><last name>Smith</last name><height>180<

我试图从一大块连续文本中导出特定数据。我知道PERL是为做这样的事情而设计的。 从互联网上的例子,包括在这里,我有一些线索如何去做,但我无法携带或修改的东西立即跨越我的问题

我相信我所做的很简单

示例原始数据(rawdata.txt)如下所示:

<id>0001</id><first name>John</first name><last name>Smith</last name><height>180</height><weight>95</weight><id>0002</id><first name>David</first name><last name>Jones</last
name><height>175</height><weight>120</weight><id>0003</id><first name>Jacob</first 
name><last name>Fitzpatrick</last name><height>165</height><weight>105</weight>
相关但非独立的目标2输出是打印(再次在屏幕上或文件上,无所谓)每个人的名字和姓氏,然后是身高,逐行打印

上述原始数据的目标2输出示例:

0001,0002,0003
John Smith, 180
David Jones, 175
Jacob Fitzpatrick, 165
我们真正想做的事情比这要复杂一点,但我相信如果我们能得到上面的结果,那么我们可以根据需要进行扩展和修改

我们也很高兴看到与我们在这里尝试做的事情非常相似的资源

谢谢和亲切的问候,
SK

您的数据类似于XML。如果您修复了格式(即通过将
更改为
),您可以使用适当的XML解析器来完成这项艰巨的工作。例如,这就是如何在以下文件中获得预期的输出:

使用简单的正则表达式

            if ( m/<id>(.*?)</)
                    {
                        push(@rrr, $1);
                    }
            my $id = join(',', @rrr);
            print $id;

if(m/(*))数据是XML,因此您应该使用XML解析器,而不是正则表达式。感谢Sniffer和Choroba回复我们。类似于这样的内容:与我们正在尝试的内容类似。问题是,我们怎么才能做到这一点。是否有一个程序几乎完全复制网站所做的工作?即加载原始数据的XML文件a(该示例中的cd_catalog.xml),有一个大盒子,可以插入“源代码”,然后显示输出/“结果”?基本上就是网站所做的,但是离线使用我们自己的“cd_catalog.xml”而不是他们的?谢谢,SK@SergeiKrutznetski:如果安装
xsh
,则可以运行我提供给您的脚本,并在STDOUT获得预期的输出。
            if ( m/<id>(.*?)</)
                    {
                        push(@rrr, $1);
                    }
            my $id = join(',', @rrr);
            print $id;