在索引文件中,我们有主要,次要和第三行。在这些行中,我们的页码的范围如下:
nutrients in, 223-234
reproductive phase of, 115-116,
应该是
nutrients in, 223-34
reproductive phase of, 115-16,
它可能是三位数或以上......你能不能请任何人帮助我。
答案 0 :(得分:3)
s/(?=(\d(?:-|(?1))\d)(?![\d-]))(\d+)\d+-\K\2//ga
我们开始寻找一个digits-digits
字符串,其中两组数字的长度相同,但不消耗任何数字。这包括前瞻性查找平衡的数字组(请参阅http://perldoc.perl.org/perlfaq6.html#Can-I-use-Perl-regular-expressions-to-match-balanced-text?以获得更好的解释)和否定前瞻以确保不再有数字(因此我们不会将120-1234
简化为{ {1}})并且它不像11-12-3那样我们不想尝试处理。请注意,在平衡数字之前可以有额外的数字;这使我们可以进一步简化部分简化的范围,例如120-34
。
一旦我们完成了这项工作,我们会尝试从第一组中找到尽可能多的数字,其中至少有一些数字剩余并且第二组中的数字开始时相同(使用反向引用{{ 1}})。 123-24
用于调整替换开始的位置,以便替换可以保持为空。 \2
用于使\K
仅表示0-9,而不是任何其他类型的数字。