正则表达式:仅用连字符和空格匹配数字

问题描述:

我试图匹配带有连字符或空格(如银行帐号)连接的至少5个字符(对于整个字符串)的数字。正则表达式:仅用连字符和空格匹配数字

“12345-62436-223434”

“12345 6789 123232”

我也应该能够匹配

“ 123-4567-890“

我使用的是目前的格局是 (\d[\s-]*){5,}[\W]

,但我发现这些问题。

  1. 当我这样做,我至少有5位字符
  2. 我要更换匹配的数字后,所有的空格匹配这个,所以我只是想匹配的数字,而不是涂白空间和超时。

    当我得到比赛时,我想要做的就是像下面这样掩盖它。

从 “12345-67890-11121” 到“***** - ***** - *****”

“ “到‘***** ***** *****’

我唯一的问题是,我没有得到像什么,我想匹配。

谢谢!

+0

whar regex的味道是这样的吗? javascript/python/c#???? –

+0

@AbdulHameed我真的不明白,但我会在java上做这个。 – Aaron

+0

有两个问题:1)有多少个数字分组,以及2)每个分组有多少个数字?有范围吗? –

这一条可能为你工作(可能是一些假阳性):

\d[ \d-]{3,}\d 

请参阅a demo on regex101.com

+1

这不符合问题 –

+1

所要求的'-'这个很好,我只是做了一些修改\ d [\ d - ] {5,} \ d 尽管如此,非常感谢你! – Aaron

+0

注意:这个正则表达式不能满足5位或更多位数的要求,请看这里:https://www.regex101.com/r/06C93P/1 –

也许你想是这样的:

(\d{5,})(?:-|\s)(\d{5,})(?:-|\s)(\d{5,}) 

Demo

编辑:

(\d+)(?:-|\s)(\d+)(?:-|\s)(\d+) 

Demo

+0

我会更新这个问题,但这非常有帮助谢谢! – Aaron

+0

我还需要匹配类似这样的“123-4567-890”,我的意思是应该有至少5位数的整个字符串天气里面他们是连续的或不是 – Aaron

+0

哦!恐怕不可能直接使用正则表达式。你可以做的只是循环捕获的组,并计数出现的位数。 –

这里的一个选择是采取您现有的模式,然后添加一个肯定的前瞻,它声称在该模式中存在七个或更多字符。假设帐号中有两个空格或破折号,这将保证有五位或更多位数。

您可以尝试使用下面的正则表达式:

^(?=.{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!"); 
} 

如果您需要先捞出从较大的文件/源的帐户号码,然后做所以之后你可以应用上面的正则表达式逻辑。