如何使用 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,而不是任何其他类型的数字。
在索引文件中,我们有第一行、第二行和第三行。在这些行中,我们的页码范围如下:
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,而不是任何其他类型的数字。