我正在阅读超过百万行的百万文件.
但是已经尝试使用常规表现来替换它们.
我的琴弦是("老虎","狮子","猴子")并用字符串"动物"代替它们;
我已经使用正则表达式替换
$line =~ s/tiger/animal/g;
$line =~ s/lion/animal/g;
$line =~ s/monkey/animal/g;
Run Code Online (Sandbox Code Playgroud)
处理时,执行期间需要花费大量时间.
在这里,我想了解为什么这很慢,我怎样才能更快地解决这个问题呢?
我无法使用任何外部模块来解决此问题.
使用正则表达式的"预编译形式":
my $regex = qr/\b(?:tiger|lion|monkey)\b/;
# in your loop:
$line ~= s/$regex/animal/g;
Run Code Online (Sandbox Code Playgroud)
注意:正则表达式已缩减为单个正则表达式,并且使用非捕获组(?:...),因为捕获的文本没有用处.此外,还添加了单词锚点(这意味着monkey将匹配,但不会greasemonkey,例如).如果您还想替换复数s?,请在最后一个之前添加\b.
然而,这只关注正则表达式部分:你还谈到其他类型的处理,也许整个过程可以以某种方式改变,以便最终更快.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |