11

私は簡単な文字列操作をしようとしています:拡張子なしでファイルの名前を取得します。のみ、string.find()ドットに問題があるようです:

s = 'crate.png'
i, j = string.find(s, '.')
print(i, j) --> 1 1

そしてドットのみ:

s = 'crate.png'
i, j = string.find(s, 'p')
print(i, j) --> 7 7

それはバグですか、それとも何か間違っていますか?

4

3 に答える 3

21

string.find()、デフォルトでは、文字列内の文字列は検出されません。文字列内のパターンが検出されます。より完全な情報はリンクで見つけることができますが、ここに関連する部分があります。

'。' 任意の文字を表すことができるワイルドカード文字を表します。

文字列を実際に見つけるには.、ピリオドをパーセント記号でエスケープする必要があります。%.

編集:あるいは、いくつかの追加の引数find(pattern, init, plain)を渡すことができます。これによりtrue、最後の引数として渡し、プレーンな文字列を検索できます。それはあなたの声明を出すでしょう。

> i, j = string.find(s, '.', 1, true)   -- plain search starting at character 1
> print(i, j) 
6 6
于 2013-03-06T21:33:10.240 に答える
9

またはstring.find(s, '%.')_string.find(s, '.', 1, true)

于 2013-03-06T21:57:51.503 に答える
5

他の答えは、何が間違っているかをすでに説明しています。完全を期すために、ファイルのベース名のみに関心がある場合は、string.match. 例えば:

string.match("crate.png", "(%w+)%.")  --> "crate"
于 2013-03-07T05:49:54.503 に答える