如果我有一个仅由1和0组成的数字,我需要创建一个正则表达式,只有当所述数字包含两个以上数字1的实例时才会匹配。
一些例子:
1000000010001
0001100000000
1000110010000
0000001000000
0100010000000
我需要我的表达才能正确匹配第1和第3个例子。
我猜这应该是一些基本的东西。我管理的最好的是:
1.+1.+(1)
但它给了我一些问题,所以我想知道是否有更好的方法来解决这个问题。
答案 0 :(得分:2)
您可以简单地使用:
.*1.*1.*1.*
所以三个1
之间有.*
。 Kleene星表示零次或多次重复,而.+
表示一次或更多次重复。
如果您不使用start(.*
)和end anchors ^
,则不需要第一个和最后一个$
。否则这些是:^.*1.*1.*1.*$
。
或者万一 - 正如@Kasra所说 - 不能保证字符串只包含1和0,你可以使用正则表达式:
10*10*1
将片段或行与grep
匹配。或者匹配整行:
^[0-1]*10*10*1[0-1]*$
答案 1 :(得分:2)
答案 2 :(得分:2)
你做的很不错。我把它改了一点以匹配完整的数字并容纳所有可能的情况:
((?:0*1){3,}0*)
查看示例here。
这当然假设你只有二进制数。如果没有,请随时将0
更改为[02-9]
以包含所有其他数字。
(?:0*1)
匹配任意数量的0
,然后匹配1
。 {3,}
意味着至少要找到这个群体三次,这意味着必须至少有三个,即两个以上1
。然后我们匹配任意数量的0
以防数字未以1
结尾,并在匹配中包含整数。