私は "example .png"と "example 2.png"という名前を持っています。私はスペースを "_"に変換しようとしています。削除する必要があります。"。"の前にスペースを見つける方法
これまでのところ私はこのようにそれをやっている:
file.gsub(" .",".").gsub(" ", "_").gsub(".tif", "")
私は "example .png"と "example 2.png"という名前を持っています。私はスペースを "_"に変換しようとしています。削除する必要があります。"。"の前にスペースを見つける方法
これまでのところ私はこのようにそれをやっている:
file.gsub(" .",".").gsub(" ", "_").gsub(".tif", "")
はrstrip
PED File.basename(filename,File.extname(filename))
を使用してextname
を追加し、その中の下線とスペースを置き換える:
File.basename(filename,File.extname(filename)).rstrip.gsub(" ", "_") + File.extname(filename)
を参照してください。
詳細:
File.basename(filename,File.extname(filename))
- 拡張.rstrip
せずにファイル名を取得 - 拡張.gsub(" ", "_")
前に空白を削除 - ファイル拡張子 - アンダースコアFile.extname(filename)
で(任意の空白を削除する/\s+/
正規表現を使用)、スペースを置き換えます。あなたが正規表現の方法を好む場合:
s = 'some example 2 .png'
puts s.gsub(/\s+(\.[^.]+\z)|\s/) {
Regexp.last_match(1) ?
Regexp.last_match(1) :
"_"
}
(can be shorteneds.gsub(/\s+(\.[^.]+\z)|\s/) { $1 || "_" }
に(参照Jordan's remark))。 this Ruby demoを参照してください。ここ
、パターンが一致した:
\s+(\.[^.]+\z)
から1又はそれ以上の空白(\s+
)を拡張する前に、(\.[^.]+
- ドット列\z
の終了前にドット以外1+文字が続きます)または\s
- - は、グループ1|
に拡張子をキャプチャしているときならば、他の空白記号が(それの後+
を追加します空白のチャンク全体をアンダースコアに置き換える必要があります)。ブロックでは、グループ1をテストするためのチェックが実行され、一致する場合は、結果に拡張子のみが挿入されます。そうでなければ、空白はアンダースコアに置き換えられます。
もっと簡潔に 's.gsub(/.../){$ 1 || "_"} '。 –
@Jordan:はい、論理は同じです:グループ1か、一致しない場合は - を使用して置換します。 –
はい...そういうわけで私はその旨のコメントを投稿しました。 –
'.'は正規表現の中の特殊文字です。 – tadman