私は簡単な文字列操作をしようとしています:拡張子なしでファイルの名前を取得します。のみ、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
それはバグですか、それとも何か間違っていますか?
私は簡単な文字列操作をしようとしています:拡張子なしでファイルの名前を取得します。のみ、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
それはバグですか、それとも何か間違っていますか?
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
またはstring.find(s, '%.')
_string.find(s, '.', 1, true)
他の答えは、何が間違っているかをすでに説明しています。完全を期すために、ファイルのベース名のみに関心がある場合は、string.match
. 例えば:
string.match("crate.png", "(%w+)%.") --> "crate"