加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何删除Perl中的每个第三个HTML标记?

发布时间:2020-12-15 23:26:12 所属栏目:大数据 来源:网络整理
导读:这是一个快速编写的脚本,但由于不熟悉正则表达式和Perl,我遇到了一些困难. 该脚本应该在HTML文件中读取.文件中有一个位置(单独),我有一堆 div s.我想删除它们中的每一个 – 它们分为四肢. 我下面的脚本不会编译,更不用说运行了. #!/usr/bin/perluse warnings
这是一个快速编写的脚本,但由于不熟悉正则表达式和Perl,我遇到了一些困难.

该脚本应该在HTML文件中读取.文件中有一个位置(单独),我有一堆< div> s.我想删除它们中的每一个 – 它们分为四肢.

我下面的脚本不会编译,更不用说运行了.

#!/usr/bin/perl
use warnings;
use strict;


&remove();

sub remove {
    my $input = $ARGV[0];
    my $output = $ARGV[1];
    open INPUT,$input or die "couldn't open file $input: $!n";
    open OUTPUT,">$output" or die "couldn't open file $output: $!n";

    my @file = <INPUT>;
    foreach (@file) {
        my $int = 0;
        if ($_ =~ '<div class="cell">') {
        $int++;
        { // this brace was the wrong way
        if ($int % 4 == 3) {
        $_ =~ '/s&;div class="cell">+.*</div>/;/g';
            }
    }
    print OUTPUT @file;
}

感谢你的帮助.我知道用正则表达式解析是错误的,但我只想让这个工作.

事后:问题几乎解决了.而且我很惭愧那些告诉我正则表达不好的人 – 我知道这一点开头.但话说回来,我想要快速的东西,并编写了产生它的XSLT.在这种情况下,我没有再次运行它的源代码,否则我会将它编程到XSLT中.

解决方法

我同意HTML不能真正被正则表达式解析,但是对于你知道格式的HTML的快速小黑客,正则表达式工作得很好.用正则表达式重复替换的技巧是将重复放入正则表达式.如果你不这样做,你将很难将正则表达式匹配器的位置与你正在阅读的输入同步.

这是我编写Perl的快速而肮脏的方式.即使它嵌套在前两个div中,它也会删除第三个div元素.读取整个文件,然后使用“g”全局替换修饰符使正则表达式进行计数.如果您之前没有看过“x”修饰符,那么它可以让您为格式添加空格 – 在正则表达式中忽略空格.

remove(@ARGV);

sub remove {
  my ($input,$output) = @_;

  open(INPUT,"<",$input) or die "couldn't open file $input: $!n";
  open(OUTPUT,">",$output) or die "couldn't open file $output: $!n";

  my $content = join("",<INPUT>);
  close(INPUT);

  $content =~ s|(.*? <div s+ class="cell"> .*? <div s+ class="cell"> .*?)
                <div s+ class="cell"> .*? </div>
                (.*? <div s+ class="cell">)|$1$2|sxg;

  print OUTPUT $content;
  close OUTPUT;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读