2012-03-26 103 views
0

我用線提取的HTML文件的文件名:Regexs在Ruby中獲取文件名

filename = File.basename(input_filename, ".*") 

目前打印

所有文件都存儲在http^x.x.edu^1^2所有形式的完整文件名不包括擴展名爲.html文件名以http^開頭,並且包含edu^我想要的是提取(它會發生變化),但它始終是.edu之後的第二個元素。我試圖破壞性的gsub!,但我用正則表達式很弱。

+0

你能給出一些更清楚的例子,說明你的輸入字符串以及你想從中提取什麼? – 2012-03-26 23:29:40

+0

另外,你可以包括你試過的代碼嗎? – 2012-03-26 23:40:47

回答

0

這應該工作,假設你的輸入被稱爲filename

base_file = filename.gsub(/(\S)*.edu/, '').scan(/\w+/)[1] 

.gsub(/(\S)*.edu, '')刪除TLD(.edu)後的第一個斜槓。

然後我們使用/\w+/正則表達式掃描剩下的內容(/some/other/file.html),結果爲['some','other','file','html']。選擇掃描的第二個元素([1])爲我們提供了.edu TLD之後的第二個元素。

這不太好,但它應該完成工作 - 我很樂意看到一個更優雅的方式來做到這一點,如果任何人有任何想法!

+0

好的解決方案它的工作,但我發現filename.split(「^」)[4]成爲更好的解決方案。謝謝 – user1290757 2012-03-28 17:31:01

+0

哈!是的,這是一個更簡單的解決方案。你只需要拋出關於這個問題中正則表達式的評論,並讓我們所有人都知道它:) – 2012-03-28 21:40:35

0

一個例子輸入字符串會有所幫助,但假設我理解的URL結構,你不需要正則表達式的所有:

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

=> 'two' 
+0

他說了一些關於'http^xxedu^1^2' ... – 2012-03-26 23:38:15

+0

http _ ^^ subdomain.domain.edu^same^different1^continue {^ continue^continue <= extract different1 http _ ^^ subdomain2.domain.edu ^相同^ notsame ^繼續^ continue2^continue5 <=提取notameame http _ ^^ subdomain.domain.edu ^不同^^somethingelse^continue^continue^continue <=提取somethingelse http _ ^^ subdomain3.domain.edu ^不同^ whatsiit^continue^differnt^<=提取whatsiit **提取每一個第二個元素後.edu 1^2^<=總是在改變** – user1290757 2012-03-26 23:58:58