【问题标题】:How can I retrieve data between tags, in Perl?如何在 Perl 中检索标签之间的数据?
【发布时间】:2010-09-20 11:15:02
【问题描述】:

我正在开发一个 perl 脚本。

这是我在文件 new.txt 中的输入字符串:

<ID>1</ID>
<CLASS>One</CLASS>
<NAME>Saran</NAME>

这是我的代码,它只打印了三行:

#!/usr/bin/perl 
open(FILEHANDLE1,"new.txt") or die "Can't Open: $!\n";
while($line=<FILEHANDLE1>)
{ 
print "$line";
}
close FILEHANDLE1;

我需要它只显示标签之间的内容。这 输出应该是:

1 一萨兰

我应该如何检索标签之间的数据? 使用正则表达式有什么办法吗?

【问题讨论】:

  • 需要更多解释才能回答这个问题。
  • 您只想删除所有标签吗?

标签: regex perl


【解决方案1】:

【讨论】:

  • 我真的看不到任何东西告诉我们 OP 实际上正在尝试读取 XML。如果他们是的话,你是绝对正确的,但谁知道呢。
  • 我认为发布一个被证明是正确的通灵忍者答案比在您可以提供帮助时不发布答案要好。
  • 可能是真的 - 我希望他或她可能会在回应之前回应 davorg 的进一步信息请求。
  • 这应该是评论,而不是答案。
  • @Ether - 这应该是一成不变的。或金刚。并且永久附加在 SO.com 之上 :)
【解决方案2】:

你试过什么?您遇到了哪些具体问题?

看起来你可能想要这样的东西:

#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Data1 some text Data2';

if (/Data1(.*)Data2/) {
  print "$1\n";
}

但是你的问题太模糊了,很难确定。

【讨论】:

    【解决方案3】:

    如果您的输入文件确实如您所描述,您可以执行以下操作:

    #!/usr/bin/perl 
    
    use warnings;
    use strict;
    open my $FILEHANDLE1, '<', "new.txt" 
         or die "Can't open file 'new.txt' for reading: $!";
    while(my $line=<$FILEHANDLE1>) { 
        chomp $line;
        $line =~ s!^<(\w+)>(\w+)</\1>!$2 !;
        print $line;
    }
    print "\n";
    close $FILEHANDLE1;
    

    总是

    use strict;
    

    use warnings;
    

    使用三个 args 打开和词法句柄。

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多