1

私はそのような文字列を持っています:

//some.path/again/and/again/foo/bar/ABC_blahblah.xls

ABC常に a/と a の間にあるものを取得したい_

私はこれまでに試しました:

path.scan(/\/(.*)_/).last.first

しかし、私は得る//some.path/again/and/again/foo/bar/ABC

ruby が最初 の と一致することがわかります/last \と の間にあるものを取得するにはどうすればよい_ですか?

前もって感謝します。

4

3 に答える 3

2

ファイル パスを分解するために完全な正規表現を使用しないでください。代わりに、事前に作成されたコードに依存してください。その理由は、コードを Windows などの別の OS に移動すると、別のパス区切り記号を使用してファイル パスを取得する可能性があるためです。Ruby の IO および File クラスは違いを認識しており、自動的に調整されます。

純粋な正規表現ソリューションを次のようなものと比較してください。

path = '//some.path/again/and/again/foo/bar/ABC_blahblah.xls'

File.basename(path) # => "ABC_blahblah.xls"

File.basename(path)[/^([^_]+)/, 1]      # => "ABC"
File.basename(path)[/^(.+)_/, 1]        # => "ABC"
File.basename(path).split('_', 2).first # => "ABC"

File'sbasenameは、ファイルへのパスを指定すると、ファイルの名前を返します。

于 2013-09-17T18:19:08.283 に答える