让我们说
sometext= "text text picture 1 picture 2 text text"
我想写一个表达式,在图片和前两张图片之前抓取文本块。有时候只会有一张照片,但可能只有五张。
我的第一次尝试是
parsed = sometext.scan(/picture.*?(picture.*?(?=picture))
但是,如果有语句,Ruby似乎不支持Regex。
[我编辑了这个问题以使其更清晰。]
答案 0 :(得分:3)
以下是各种解决方案,所有这些解决方案都给出了相同的结果:
ids = sometext.scan(/picture (\d+)/).flatten.map(&:to_i)
ids = sometext.scan(/(picture (\d+))/).map{ |str,id| id.to_i }
ids = sometext.scan(/(picture (\d+))/).map(&:last).map(&:to_i)
p ids
#=> [1, 2]
答案 1 :(得分:0)
这就是我最后做的事情。我在一行代码中抓住了整个块并将其粘贴在一个数组中。
var = sometext.scan(/goodtext.*?endofsection/m)
然后在另一行中从一个块中取出一个数组。我知道标题是第一个,然后是一个未确定数量的图片,所以我将数组限制为三个项目。
var = var.collect{|x| x.scan(/heading|image).slice(0..2)}
我需要通过gsub更多地改进这些我不需要的其他东西,但我认为这将满足我的标准。如果其他任何人都能想到更优雅的方式,我就是全力以赴。