我正在尝试匹配连字符或空格(如银行帐号)至少5个字符(整个字符串)的数字。
e.g
“12345-62436-223434”
“12345 6789 123232”
我也应该能够匹配
“123-4567-890”
我正在使用的当前模式是
(\d[\s-]*){5,}[\W]
但我遇到了这些问题。
我要替换它,所以我只想匹配数字,而不是白色空格和超量。
当我得到比赛时,我想做的就是像下面那样掩饰它。
从“ 12345-67890-11121 ”到“***** - ***** - *****”
或
从“ 12345 67890 11121 ”到“***** ***** *****”
我唯一的问题是我不能像我想要的那样匹配它。
谢谢!
答案 0 :(得分:2)
答案 1 :(得分:2)
答案 2 :(得分:1)
此处的一个选项是采用现有模式,然后添加一个正面预测,断言模式中有七个或更多字符。假设账号中有两个空格或短划线,这将保证有五位或更多位数。
您可以尝试使用以下正则表达式:
^(?=.{7,}$)((\\d+ \\d+ \\d+)|(\\d+-\\d+-\\d+))$
测试代码:
String input = "123-4567-890";
boolean match = input.matches("^(?=.{7,}$)((\\d+ \\d+ \\d+)|(\\d+-\\d+-\\d+))$");
if (match) {
System.out.println("Match!");
}
如果您需要先从较大的文档/来源中删除帐号,然后执行此操作,之后您可以应用上面的正则表达式逻辑。