正则表达式:包含至少两个0但不包含连续的0

时间:2016-06-29 12:13:28

标签: regex nlp

此练习的解决方案是否为以下正则表达式?我在互联网上找到它,但我不相信这是正确的。

(1*011*(0+011*))*

根据“计算语言学和自然语言处理手册”一书中第1章的理论,我该如何解决这个问题呢?

我想要一个能满足下面常规语言的正则表达式

    L = {010,0101,0110,0101010,01011110,.....}

4 个答案:

答案 0 :(得分:2)

这是另一种选择:

^[^0]*[0]{1}([^0]+[0]{1}[^0]*)+$

答案 1 :(得分:1)

你可以选择:

^(?!.*00.*)(?=.*0.*0).*$

你可以玩它here

说明:

  • (?!.*00.*)输入无法连续两次0
  • (?=0.*0)输入必须包含至少两个0

如果您不想使用环视,请使用Maria的回答

答案 2 :(得分:0)

这个怎么样:

0[^0]+0

0后跟一个范围内的字符"不是零" [^0]后跟零0

答案 3 :(得分:0)

您发布的正则表达式是错误的,只需注意它有一个0+子序列,它应该允许一个或多个0的序列。可以使用此解决方案进行纠正:

1*011*0(10?)*

或使用+运算符

1*01+0(10?)*

对它的解释应该是:首先跳过用1*子模式开始表达的那些,所以你到达第一个0,然后跳过至少一个 1,以及跟随它的所有1(使用子模式1+)直到第二个0,所以我们刚刚匹配了与您匹配的最小长度字符串常规语言。在这里,所有其余的都是可选的,我们需要重复模式1的任意次数,并带有可选的尾随0(如10?中所示),或者应该连续两次{ {1}}秒。您可以在此demo中查看它,其中包含1到8个字符的所有可能字符串以及它们的匹配与否。