Android 允许空格的17位正则表达式

Android 允许空格的17位正则表达式,android,regex,ocr,Android,Regex,Ocr,允许17位数字在任意数量的字符之间加空格或不加空格的正则表达式是什么? 我在Android上使用OCR实时捕获SDK(ABBYY RTR SDK),我在使用自定义数据捕获(必须捕获17位数字,中间有空格或没有空格) 我的正则表达式当前为: field.setRegEx( "[0-9]{14,16}" ); 这只能捕获行内数字(38492039483726473) 但是我需要它来捕获这种格式的数字,以及这种格式-38492039483726473。 如何实现这一点?尝试用可选空格重复一个数字:

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

我的正则表达式当前为:

field.setRegEx( "[0-9]{14,16}" );
这只能捕获行内数字(38492039483726473

但是我需要它来捕获这种格式的数字,以及这种格式-38492039483726473
如何实现这一点?

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

(\d ?){17}

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

(\d ?){17}

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

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

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

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

如果只是这两种格式:

(\d{17}|\d{4}\s\d{5}\s(?:\d{4}\s){2})
捕捉一个数字17次


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

如果这两种格式都是简单的:

(\d{17}|\d{4}\s\d{5}\s(?:\d{4}\s){2})
捕捉一个数字17次


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

这是一个更好的选择(除非必须使用一个regexp)@mrzasa我投票给了你,因为你比我赢了,但是是的,我也认为数字字符串中任意的空格在某个时候都会被去掉。这是一个实时捕获。我对它当前捕获的字符串没有太多控制权,我只能访问最终捕获(这是正则表达式的情况)。但我明白如果我可以访问这些字符串,这将是一个解决方案。@DeanEncoded,那么其他正则表达式的答案有望帮助您。这是一个更好的选择(除非您必须使用一个正则表达式)@mrzasa我投票给了你,因为你比我赢了,但是是的,我也认为数字字符串中任意的空格在某个时候都会被去掉。这是一个实时捕获。我对它当前捕获的字符串没有太多控制权,我只能访问最终捕获(这是正则表达式的情况)。但我明白,如果我能访问这些字符串,这将是一个解决方案。@DeanEncoded,那么其他正则表达式的答案有望对您有所帮助。OP说:“在任意数量的字符之间允许有或没有空格的17位数字的正则表达式可能是什么?”您的正则表达式仅适用于问题中发布的特定示例,而不适用于字符串中任何位置的空格。@mrzasa这就是为什么我在回答前加上“如果它仅适用于这两种格式”。如果需要更多的格式,我绝对建议您选择您的答案。对不起,我需要阅读完整的答案,而不仅仅是代码示例:)这非常有帮助。虽然我在OCR的文档中注意到它的正则表达式不支持特定字符。使用您的答案,我能够以需要捕获的所有格式捕获数据。非常感谢。OP说:“什么样的正则表达式允许在任意数量的字符之间包含或不包含空格的17位数字?”您的正则表达式仅适用于问题中发布的特定示例,而不适用于字符串中任何位置的空格。@mrzasa这就是为什么我在回答前加上“如果它仅适用于这两种格式”。如果需要更多的格式,我肯定会推荐你的答案。对不起,我需要阅读完整的答案,而不仅仅是代码示例:)这非常有帮助。虽然我在OCR的文档中注意到它的正则表达式不支持特定字符。使用您的答案,我能够以需要捕获的所有格式捕获数据。非常感谢。好办法!我注意到文档中说一些正则表达式字符不受支持(我的错)。我还注意到,如果在正则表达式中使用or语句来找到所需的正确格式,效果会更好。在这种情况下:\d{17}|\d{4}\s\d{5}\s\d{4}\s\d{4}将是一种好方法。很棒的方法!我注意到文档中说一些正则表达式字符不受支持(我的错)。我还注意到,如果在正则表达式中使用or语句来找到所需的正确格式,效果会更好。在这种情况下:\d{17}|\d{4}\s\d{5}\s\d{4}\s\d{4}是最好的选择。