开始和结束之间的Perl提取

时间:2014-02-09 16:29:39

标签: regex perl regex-lookarounds

我的目标是从开始到结束单词提取字符串,(dIonly是开始,应该是结束工作集[包括这些括号];此外我想将输出打印到名为{的文件中{1}}。 我遇到了lookbehind的问题,因为没有实现变量长度。 现在我扭转了字符串,做了前瞻。但是,有些东西仍无效。

我需要从dIonly开始,这意味着我必须扭转字符串以避免上述问题,因为有很多工作集((在整个字符串中,这意味着我无法从那里开始......) p>

谢谢!我现在编辑了这个脚本。我需要做的是扭转字符串。我通过将带有空格作为分隔符的字符串拆分为列表,然后将其反转,并将其再次放入字符串中来实现。只是在分隔符“解决方案”中再次将其拆分为一个列表,因为我的输出将有几个字符串,我想要提取到工作集(这只有在字符串反转时才有效,否则我会对我不想要的工作集进行处理并且提取一个不同的字符串,因为dIonly是解决方案模式的一个独特部分,我可以从中向前工作到第二个工作集(它本身是第一个带有2个括号的工作集)。然后我想将它打印到新的输出文件。欢迎任何建议!

这是一个数据样本: ......表示它继续

report
     

等式(符号< = 的内置等式)6< = 40 --->真正   解决方案4(状态31)指出:40个重写:8421在5357394502ms cpu   (1464ms真实)(0)重写/秒)G:游戏 - > workset(空)c playA   c dIonly c           .....

..... maxRiskC(cA, 3)) c workset((RiskCA(cA, 3), RiskCB(cB, 2), maxRiskC(cA, 3))) c RiskCA(cA, 3) c RiskCB(cB, 2)) ***********

1 个答案:

答案 0 :(得分:0)

反过来,它会反转字母而不是单个字,对于那个标量。 您可以通过贪婪的比赛来尝试它,因为您只对最后一个工作集感兴趣:

while (my $line = <$input>) { 
    chomp $line;
    if ($line =~ /.*workset(.*dIonly)/) {
            # do something with results
            say $fh "'$1'";
            }
}

如果您在写入文件之前需要撤消,可以执行以下操作:

while (my $line = <$input>) { 
    chomp $line;
    if ($line =~ /.*workset(.*dIonly)/) {
            say $fh join " ",reverse (split / /,$1);
            }
}