在大文件中,正则表达式的交替似乎非常慢

jjm*_*elo 7 regex raku

我正在尝试使用这个正则表达式:

my @vulnerabilities = ($g ~~ m:g/\s+("Low"||"Medium"||"High")\s+/);
Run Code Online (Sandbox Code Playgroud)

像这样文件块上,从一个“排序”到下一个的块。每个必须有几百 KB,并且所有这些加在一起需要 1 到 3 秒(每次迭代除以 32)。

这怎么能加快呢?

Eli*_*sen 8

对示例文件的检查表明,字符串仅作为整行出现,以制表符和空格开头。从你的回答中,我进一步了解到你真的只对计数感兴趣。如果是这种情况,那么我会建议这样的解决方案:

my %targets = "\t Low", "Low", "\t Medium", "Medium", "\t High", "High";
my %vulnerabilities is Bag = $g.lines.map: {
    %targets{$_} // Empty
}
dd %vulnerabilities;  # ("Low"=>2877,"Medium"=>54).Bag
Run Code Online (Sandbox Code Playgroud)

这在我的机器上运行大约 0.25 秒。

彻底查看问题域总是值得的!