我用線提取的HTML文件的文件名:Regexs在Ruby中獲取文件名
filename = File.basename(input_filename, ".*")
目前打印
所有文件都存儲在http^x.x.edu^1^2
所有形式的完整文件名不包括擴展名爲.html文件名以http^
開頭,並且包含edu^
我想要的是提取(它會發生變化),但它始終是.edu
之後的第二個元素。我試圖破壞性的gsub!
,但我用正則表達式很弱。
我用線提取的HTML文件的文件名:Regexs在Ruby中獲取文件名
filename = File.basename(input_filename, ".*")
目前打印
所有文件都存儲在http^x.x.edu^1^2
所有形式的完整文件名不包括擴展名爲.html文件名以http^
開頭,並且包含edu^
我想要的是提取(它會發生變化),但它始終是.edu
之後的第二個元素。我試圖破壞性的gsub!
,但我用正則表達式很弱。
這應該工作,假設你的輸入被稱爲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之後的第二個元素。
這不太好,但它應該完成工作 - 我很樂意看到一個更優雅的方式來做到這一點,如果任何人有任何想法!
好的解決方案它的工作,但我發現filename.split(「^」)[4]成爲更好的解決方案。謝謝 – user1290757 2012-03-28 17:31:01
哈!是的,這是一個更簡單的解決方案。你只需要拋出關於這個問題中正則表達式的評論,並讓我們所有人都知道它:) – 2012-03-28 21:40:35
一個例子輸入字符串會有所幫助,但假設我理解的URL結構,你不需要正則表達式的所有:
require 'uri'
File.basename(URI.parse('http://subdomain.domain.edu/one/two').path)
=> 'two'
他說了一些關於'http^xxedu^1^2' ... – 2012-03-26 23:38:15
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
你能給出一些更清楚的例子,說明你的輸入字符串以及你想從中提取什麼? – 2012-03-26 23:29:40
另外,你可以包括你試過的代碼嗎? – 2012-03-26 23:40:47