2012-02-29 158 views
0

我想建立一个正则表达式,它允许我通过具有数千行的文本文件进行解析,并且每行包含一个具有可变数字大小的数字。正则表达式匹配某些数字模式

每个数字只能包含数字1或0(零)。

要求是必须至少有3个1的数字,并且至少有一个零。因此,每个数字的最小所需大小是4,并且它具有无限的最大值。

例如,它必须匹配:

000000111 - has at least 1 zero and 3 ones 
1110 - same thing 
11111000 - same thing 
111 - FAIL, because it's under 4 digits long 
0000000011 - FAIL, needs at least 3 ones 

谁能帮助我吗?我的问题是,我不能确定如何找到'至少3个和0个任何地方在数字',关键词是在任何地方。

+0

如果可能尝试进行排序字符串,之后与正则表达式检查它'0 + 1 {3,}' – 2012-02-29 20:34:57

回答

4

你可以用匹配这样的数字:

(?=1*0)(?:0*1){3}[10]* 

(?=1*0)确保至少有1 0与前瞻(?=...)

(?:0*1){3}配以3 1小号

[10]*比赛的数量休息或号码

+0

这很好,谢谢! – swiftcode 2012-02-29 20:34:51

0

除非这是严格的正则表达式练习/练习,否则这将更容易手动完成。 (并且由于正则表达式将是复杂的(即时猜测),这将是方式更有效)

int ones = 0; 
int zeroes = 0; 
for(int i=0;i<str.length();++i) 
{ 
    if(str[i] = '0') 
     ++zeroes; 
    else if(str[i] = '1') 
     ++ones; 
} 

if(ones+zeroes >= 4 && ones >=3 && zeroes >= 1) 
    return true; 
+0

是的,这是针对大学的一个正则表达式主题,我们不能使用编程语言,否则就像你说的那样会更容易。不管怎么说,还是要谢谢你! – swiftcode 2012-02-29 20:34:00

+0

没问题!祝你好运 – 2012-02-29 20:34:42