0

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

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

4

3 回答 3

1

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

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

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

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

于 2012-07-11T16:55:40.503 回答
0

如果您只想匹配 3 位数字,就像

/[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*/

如果匹配,则字符串正好包含三个数字。

于 2012-07-11T16:52:47.760 回答
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
于 2012-07-11T16:54:24.613 回答