我想计算字符串中可包含非数字(aa11aa1a)的位数。我可以用有限状态机解决这个问题吗?这个问题可以表示为正则表达式吗?
如果我想知道计数是否为“X”,它会改变自然问题吗?更确切地说,这个字符串中有3位数字吗? FSM足以解决问题吗?
答案 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