我已经搜索过,但却无法找到正确的做法。我逐行读取文件,并希望从每行的正则表达式创建一个新对象。我没有使用XML解析器,因为数据格式不正确,下面列出的是我需要从每一行获得的所有内容。
我似乎无法通过扫描来返回块的结果。它只返回原始字符串。我通过创建这个temp
变量暂时解决了这个问题,但我确信有更好的方法。
enum = File.foreach(filename)
enum.map do |line|
temp = nil
line.scan(/<cab id="(\w+)" updates="(\d+)"/) { |a,b| temp = Cab.new(a,b) }
temp
end
感谢您的帮助。
答案 0 :(得分:0)
我愿意:
enum.map {|line| Cab.new(*line.match(/<cab id="(\w+)" updates="(\d+)"/)[1,2]) }
或者如果我希望它更具可读性:
enum.map {|line|
line =~ /<cab id="(\w+)" updates="(\d+)"/
Cab.new($1, $2)
}
答案 1 :(得分:0)
扫描+地图可能吗?
line.scan(/<cab id="(\w+)" updates="(\d+)"/).map { |a,b| Cab.new(a,b) }