【问题标题】:Regex for 17 digits allowing spaces允许空格的 17 位正则表达式
【发布时间】:2018-03-12 11:14:50
【问题描述】:

在任意数量的字符之间允许有或没有空格的 17 位数字可能是什么正则表达式? 我在 Android 上使用 OCR 实时捕获 SDK(ABBYY RTR SDK)(并且我正在使用自定义数据捕获(必须捕获 17 位数字,任何地方之间有或没有空格)

我的正则表达式目前是这样的:

field.setRegEx( "[0-9]{14,16}" );

这只能捕获行内数字(38492039483726473

但我需要它来捕获这种格式的数字,以及这种格式 - 3849 20394 8372 6473。 我该如何实现这一目标?

【问题讨论】:

    标签: android regex ocr


    【解决方案1】:

    如果只是这两种格式:

    (\d{17}|\d{4}\s\d{5}\s(?:\d{4}\s){2})
    

    捕获一个数字 17 次

    捕获 4 位数字后跟一个空格,然后捕获 5 位数字后跟另一个空格,然后捕获 4 位数字后跟一个空格两次

    【讨论】:

    • OP 说:“允许 17 位数字在任意数量的字符之间有或没有空格的正则表达式是什么?”您的正则表达式仅适用于问题中发布的特定示例,不适用于字符串任何位置的空格。
    • @mrzasa 这就是为什么我在回答前加上“如果只是为了这两种格式”。如果需要更多格式,我肯定会建议您寻求答案。
    • 抱歉,我需要阅读全部答案,而不仅仅是代码示例 :)
    • 这很有帮助。尽管我在 OCR 的文档中注意到它的正则表达式不支持特定字符。使用您的答案,我能够以我需要捕获的所有格式捕获数据。谢谢!
    【解决方案2】:

    尝试使用可选空格重复一个数字:

    (\d ?){17}
    

    Demo

    【讨论】:

    • 好方法!我注意到文档说不支持某些正则表达式字符(我的错)。我还注意到,如果我在正则表达式中使用 or 语句来找到我需要的正确格式会更好。在这种情况下: \d{17}|\d{4}\s\d{5}\s\d{4}\s\d{4} 将是要走的路。
    【解决方案3】:

    @mrzasa 给出的答案的替代方法是首先从数字字符串中删除所有空格,然后使用更简单的正则表达式来检查 17 位数字:

    String input = "3849 20394 8372 6473";
    if (input.replaceAll("\\s+", "").matches("\\d{17}")) {
        System.out.println("match");
    }
    

    【讨论】:

    • 这是一个更好的选择(除非你必须使用一个正则表达式)。
    • @mrzasa 我赞成你,因为你打败了我,但是是的,我也想在某些时候无论如何都必须去掉数字字符串中的任意空格。
    • 这是实时捕获。我对它当前正在捕获的字符串没有太多控制权,我只能访问最终捕获(在正则表达式的情况下)。但我明白,如果我可以访问这些字符串,这将是一个解决方案。
    • @DeanEncoded 那么其他的正则表达式答案有望帮助你。
    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2011-08-27
    • 2012-07-09
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多