我可以用FSM计算字符串中的位数吗?

时间:2012-07-11 16:48:49

标签: regex fsm computation

我想计算字符串中可包含非数字(aa11aa1a)的位数。我可以用有限状态机解决这个问题吗?这个问题可以表示为正则表达式吗?

如果我想知道计数是否为“X”,它会改变自然问题吗?更确切地说,这个字符串中有3位数字吗? FSM足以解决问题吗?

3 个答案:

答案 0 :(得分:1)

第二个问题可以用正则表达式解决。

考虑:^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*$

您还可以使用群组:^[^0-9]*([0-9][^0-9]*){3}$

我认为你不能单独使用正则表达式来解决第一个问题。但是使用正则表达式(删除所有非数字或匹配单个数字)的解决方案将是微不足道的。

答案 1 :(得分:0)

如果您只想匹配类似

的3位数字
/[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*/

如果匹配,则字符串恰好包含三位数。

答案 2 :(得分:0)

我建议使用正则表达式取出所有非数字,然后只取结果字符串的长度,而不是使用显式的FSM。或者,将您的正则表达式与各个数字相匹配,并计算匹配数量(但这可能效率较低)。或者,最简单的方法(伪代码):

count = 0

for char in string
    if char is a digit
        increment count

// For your second part
    if count > X
        count isn't X; done

if count < X
    count isn't X; done
else
    count is X; done