2009-06-21 6 views
1

У меня есть текстовый файл, который содержит список регулярных выражений, которые я регулярно использовать для очистки HTML файлов по:Чтение файла с Рубином

list.txt

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

, если каждая строка состояла из форма «# {а} | # {Ь}», что было бы самым простым способом чтения и преобразовать этот файл в массив:

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

Умм, я просто написал вам код, который будет работать на | также. Попробуйте это. – Elitecoder

+0

Написал другой код, который будет работать для "!" Надеюсь, это поможет. – Elitecoder

ответ

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('|') с чем-то более сложным.

Смежные вопросы