有没有办法使用gsub替换单行数组中的多个字符串。
这是日志文件
13:29:00 (alex) OUT: "72500_2010_0F" abcd@S400532
13:31:12 (alex) IN: "72600_2010_0F" abnc@S403818
13:31:52 (alex) IN: "71200_2010_0F" osa@S400583
我想替换下面的
(alex) with ""
OUT: with OUT
IN: with IN
"72500_2010_0F" with XYZ
"71200_2010_0F" with QWE
"72600_2010_0F" with UIO
将原始文件(日志文件)放入数组中,我想读取数组中的每一行并执行gsub。不想使用哈希作为它的复杂 - 作为Ruby初学者...&到正则表达式......
array1.each do |element|
i = element.gsub(/?????????/) [ What should go here]
array2.push(i)
end
我希望对原始数组进行更改,但是将修改后的行推送到不同的数组,即array2
什么是最好的&这个易于理解的代码? - 请帮忙
答案 0 :(得分:4)
看String#sub,似乎有很多方法可以做你想做的事情:
一种方法可以是使用哈希作为第二个参数
def cleansed_log_line(line)
replacement_rules = {
'alex' => '',
'OUT: ' => 'OUT ',
'IN: ' => 'IN '
}
matcher = /#{replacement_rules.keys.join('|')}/
line.gsub(matcher, replacement_rules)
end
另一种方法是使用阻止形式
def cleansed_log_line(line)
replacement_rules = {
'alex' => '',
'OUT: ' => 'OUT ',
'IN: ' => 'IN '
}
matcher = /#{replacement_rules.keys.join('|')}/
line.gsub(matcher) do |match|
replacement_rules[match] || match
end
end
另一个不太好的实现
def cleansed_log_line(line)
replacement_rules = {
/alex/ => '',
'OUT: ' => 'OUT ',
'IN: ' => 'IN '
}
replacement_rules.each do |match, replacement|
line = line.gsub(match, replacement)
end
line
end
哈希和RegEx无需担心。此函数可以清除传递给它的任何行,并返回清理的行。