Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的Regexs获取文件名_Ruby_Regex - Fatal编程技术网

Ruby中的Regexs获取文件名

Ruby中的Regexs获取文件名,ruby,regex,Ruby,Regex,我正在使用以下行提取html文件的文件名: filename = File.basename(input_filename, ".*") 当前打印不包括.html扩展名的完整文件名 所有文件都以http^x.x.edu^1^2的形式存储所有文件名都以http^开头并包含edu^我想要的是提取2,它会发生变化,但它始终是.edu之后的第二个元素。我尝试过破坏性的gsub!但是我对正则表达式的理解很弱。一个示例输入字符串会有所帮助,但是假设我理解url结构,您根本不需要正则表达式: require

我正在使用以下行提取html文件的文件名:

filename = File.basename(input_filename, ".*")
当前打印不包括.html扩展名的完整文件名


所有文件都以http^x.x.edu^1^2的形式存储所有文件名都以http^开头并包含edu^我想要的是提取2,它会发生变化,但它始终是.edu之后的第二个元素。我尝试过破坏性的gsub!但是我对正则表达式的理解很弱。

一个示例输入字符串会有所帮助,但是假设我理解url结构,您根本不需要正则表达式:

require 'uri'
File.basename(URI.parse('http://subdomain.domain.edu/one/two').path)

=> 'two'

假设您的输入名为filename,则此操作应该有效:

.gsub/\S*.edu将删除TLD.edu后第一个斜杠的所有内容

然后我们使用/\w+/regex扫描剩下的/some/other/file.html,结果是['some'、'other'、'file'、'html']。选择扫描的第二个元素[1]将得到.edu TLD之后的第二个元素


这并不漂亮,但它应该完成这项工作——如果有人有任何想法,我希望看到一种更优雅的方式来完成它

你能给我一个更清楚的例子,说明你的输入字符串是什么,以及你想从中提取什么吗?另外,你能包括你尝试过的代码吗?http ^^ subdomain.domain.edu^ same^ different1^ continue^ continue^ continue好的解决方案它确实有效,但是我发现filename.split^[4]是一个更好的解决方案。谢谢你!是的,这是一个更简单的解决方案。你只需在问题中加入关于正则表达式的评论,让我们都看不到:
base_file = filename.gsub(/(\S)*.edu/, '').scan(/\w+/)[1]