我想计算一个字符串中可以包含非数字(aa11aa1a)的位数。我可以用有限状态机解决这个问题吗?这个问题可以表示为正则表达式吗?
如果我想知道计数是否为“X”怎么办,它会改变性质问题吗?更准确地说,这个字符串中有 3 位数字吗?FSM 是否足以解决问题?
我想计算一个字符串中可以包含非数字(aa11aa1a)的位数。我可以用有限状态机解决这个问题吗?这个问题可以表示为正则表达式吗?
如果我想知道计数是否为“X”怎么办,它会改变性质问题吗?更准确地说,这个字符串中有 3 位数字吗?FSM 是否足以解决问题?
第二个问题可以用正则表达式解决。
考虑:^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*$
。
您还可以使用组:^[^0-9]*([0-9][^0-9]*){3}$
我认为您不能单独使用正则表达式来解决第一个问题。但是使用正则表达式的解决方案(删除所有非数字,或匹配单个数字)将是微不足道的。
如果您只想匹配 3 位数字,就像
/[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*/
如果匹配,则字符串正好包含三个数字。
我建议不要使用显式 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