如何删除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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |