捕获组之前的反向引用

时间:2014-03-10 16:24:01

标签: regex

我正在尝试匹配文字Page x of x,以便我可以识别文档中的最后一页。

我一直在玩捕获组,发现正则表达式Page (\d*) of \1几乎可以正常工作,除了它还匹配Page 2 of 25之类的东西。理想情况下,我想使用Page \1 of (\d*),但我想正则表达式引擎不支持。

我还应该注意,这是OCR作业的一部分,所以我不能依赖字符串结尾,因为偶尔我会选择额外的字符(例如Page 2 of 25la

任何人都有任何提示吗?

3 个答案:

答案 0 :(得分:2)

使用\d+代替\d*。还要使用环视检查数字结束。

Page (\d+) of \1(?=\D)

答案 1 :(得分:1)

预览:

Page (\d*) of \1(?=\D|\Z)

当后向引用后面的输入是“非数字”字符或输入结束时,前瞻将匹配。

答案 2 :(得分:1)

但最后你可以获得一个额外的数字,而不是像a这样的额外字符。然后你可以在你的文档的最后一页,但regexpr不匹配。

攻击此问题的最佳方法可能是从简单的正则表达式

开始
Page\s+(\d+)\s+of\s+(\d+)

Regular expression visualization

Debuggex Demo

并迭代所有出现以某种方式克服这个令人讨厌的额外字符问题并获得最大页码数。在明确了多少页面之后,再检查组1等于组2的位置。

我在我的正则表达式中包含了\s+。由于您的数据,这也应该是必要的。

但最终根据OCR处理的准确性,它才有可能发挥作用。