我有一个这样的字符串:
//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之间的内容_?
提前致谢。
不要使用完整的正则表达式来分解文件路径。相反,依靠一些预先编写的代码。原因是,如果您将代码移动到不同的操作系统,例如 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"
尝试使用\/([^\/]*)_它将避免在捕获的组中出现任何正斜杠。
path = "//some.path/again/and/again/foo/bar/ABC_blahblah.xls"
path.scan(/(?:[^\/])*(?=_)/).reject(&:empty?)