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 \和 the之间的内容_

提前致谢。

4

3 回答 3

2

不要使用完整的正则表达式来分解文件路径。相反,依靠一些预先编写的代码。原因是,如果您将代码移动到不同的操作系统,例如 Windows,您可能会使用不同的路径分隔符获取文件路径。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"

basename当给定文件的路径时,文件返回文件的名称

于 2013-09-17T18:19:08.283 回答
1

尝试使用\/([^\/]*)_它将避免在捕获的组中出现任何正斜杠。

于 2013-09-17T17:09:23.900 回答
0
path = "//some.path/again/and/again/foo/bar/ABC_blahblah.xls"
path.scan(/(?:[^\/])*(?=_)/).reject(&:empty?)
于 2013-09-17T18:19:50.833 回答