2009-06-21 77 views
1

我有一個包含正則表達式的列表,我經常使用根據乾淨的HTML文件的文本文件:讀取文件使用Ruby

LIST.TXT

<p[^>]*>|<p> 
<\/?(font|span)[^>]*>| 
<\/u>\s*<u>| 
<\/u>\s*<i>\s*<u>|<i> 

如果每行包括了形式「#{一} |#{b}」,這將是對讀取和該文件轉換爲陣列的最簡單的方法:

[ 
    [ /<p[^>]*>/, '<p>' ], 
    [ /<\/?(font|span)[^>]*>/, '' ], 
    [ /<\/u>\s*<u>/, '' ], 
    [ /<\/u>\s*<i>\s*<u>/, '<i>' ] 
] 
+0

嗯,我只寫了你這將爲其工作,代碼|以及。 試試看。 – Elitecoder 2009-06-21 21:49:28

回答

2

嘗試以下操作:

result = File.foreach("list.txt").collect do |line| 
    *search, replace = line.strip.split("|", -1) 
    [Regexp.new(search.join("|")), replace] 
end 

或者,如果你的分隔符不會在正則表達式和替換髮生:

result = File.foreach("list.txt").collect do |line| 
    search, replace = line.strip.split("!", -1) 
    [Regexp.new(search), replace] 
end 
0

假設#{b}部分永遠不會包含一個|,我得到如下:

File.open(filename,"r").collect 
    { |s| 
    x = s.rindex('|'); 
    [ Regexp.new(s[0..x]), s[x+1..-1].chop ] 
    } 

否則,你可能有更復雜的東西來代替s.rindex('|')