test.html的相关代码段:
<div id="seat_31F_vacant" class="seatVacant" onclick="UpdateHost(this);Common.DoPostBack('lbtPostBack','31F');" onmouseover="Seat_onMouseOver(this)" onmouseout="Seat_onMouseOut(this)">F</div>
现在考虑一下这个红宝石代码:
doc = Hpricot(test.html)
doc.search("//div[@class='seats']").each do |seat|
@vacant_seat += seat.to_s.scan(/id="seat_(.*)_vacant/)
end
@log.info @vacant_seat.to_s
当记录@ vacant_seat.to_s时,我最终会这样做:
[[“31F”],[“31E”],[“31D”],[“31C”]](使用 1.9.2 )
31F31E31D31C(使用 1.8.7 )
这意味着如果我做了@vacant_seat [0] .to_s我会得到:
[“31F”] ( 1.9.2 )和 31F ( 1.8.7 )
我想以31F(与1.8.7一样)结束
有什么想法吗?有没有一种通用的方法可以在两个Ruby版本中工作?我需要提取位于ID属性中下划线字符(_)之间的字符串(例如31F)。如果有更好的方法,我会很高兴听到它。
答案 0 :(得分:1)
Ruby 1.9.2为数组改为了__s。它用于连接所有元素并将其打印为31F31E31D31C
。
现在它添加了花哨的格式,使其看起来像一个数组,所以你看到数组上的括号,并引用它们内部的字符串元素,所以你得到[["31F"], ["31E"], ["31D"], ["31C"]]
。
看起来@vacant_seat
是一个数组数组,因此@vacant_seat[0].to_s
为您提供了["31F"]
。
如果您只需要具有元素的数组,那么两者中的数组都是相同的,只是以不同方式打印。
现在,您可以使用join
来调用1.8.7中的to_s。 @vacant_seat.join #=> 31F31E31D31C
或@vacant_seat[0].join #=> 31F
会为您提供所需内容。