0

非数字 (aa11aa1a) を含む文字列の桁数をカウントしたい。この問題を有限ステート マシンで解決できますか? この問題は正規表現で表現できますか?

カウントが「X」かどうか知りたいのですが、性質の問題は変わりますか? もっと正確に言うと、この文字列には 3 桁の数字がありますか? FSM は問題を解決するのに十分ですか?

4

3 に答える 3

1

The second problem can be solved with a regular expression.

Consider: ^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*$.

You could also use groups: ^[^0-9]*([0-9][^0-9]*){3}$

I don't think you can use regular expressions alone to solve the first problem. But a solution using regular expressions (to remove all non-digits, or match a single digit) would be trivial.

于 2012-07-11T16:55:40.503 に答える
0

3桁だけを一致させたい場合は、次のようになります。

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

一致する場合、文字列には正確に3桁の数字が含まれます。

于 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 に答える