我已经搜索过,并且找不到正在尝试的正确方法。我一行一行地读取一个文件,并希望从每行的正则表达式创建一个新的对象。我没有使用XML解析器,因为数据格式不正确,下面列出了我需要从每行中获得的全部内容。在正则表达式期间传递给#scan的块的返回结果
我似乎无法得到扫描返回块的结果。它只是返回原始字符串。我通过创建这个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
感谢您的任何帮助。
感谢mckeed提供了两种写作方式。这给出了我正在寻找的结果。我想我应该去看看你演示的比赛。 – Oli 2010-04-10 22:05:40
是的,我应该更多地解释匹配(或=〜简写)是什么,当你想匹配正则表达式对一个字符串一次,而扫描是为了当你需要匹配多次对一个字符串。如果您的源文件在匹配之间没有换行符,您仍然可以对整个文件内容使用扫描来连续获取所有匹配项。 – mckeed 2010-04-11 21:04:04