如何使用 perl 明智地缩小索引页码

How to shrink the index page numbers in digits wise using perl

在索引文件中,我们有第一行、第二行和第三行。在这些行中,我们的页码范围如下:

nutrients in, 223-234
reproductive phase of, 115-116,

应该是

nutrients in, 223-34
reproductive phase of, 115-16,

可能是三位数或以上...请哪位大神帮忙解答一下。

s/(?=(\d(?:-|(?1))\d)(?![\d-]))(\d+)\d+-\K//ga

我们开始寻找一个 digits-digits 字符串,其中两组数字的长度相同,但不消耗任何字符串。这涉及前瞻寻找一组平衡的数字(请参阅 http://perldoc.perl.org/perlfaq6.html#Can-I-use-Perl-regular-expressions-to-match-balanced-text? 以获得很好的解释)和否定前瞻以确保后面没有更多数字(因此我们不会将 120-1234 简化为 120-34) 而且它不是我们不想尝试处理的 11-12-3 之类的东西。请注意,平衡数字之前可以有额外的数字;这使我们能够进一步简化部分简化的范围,例如 123-24.

完成后,我们尝试从第一组中找到尽可能多的数字,其中至少有一些数字剩余并且第二组中的数字开始相同(使用反向引用 </code>). <code>\K 用于调整替换开始的位置,以便替换可以保持为空。 /a 用于使 \d 仅表示 0-9,而不是任何其他类型的数字。