(не похоже, что образец HTML, который вы опубликовали, на самом деле содержит примеры шаблона, который вы пытаетесь найти.)
Алисия права, что регулярное выражение против html, как правило, плохая идея, и по мере усложнения ваших требований оно будет нарушено.
Тем не менее, ваш пример довольно прост ..
doc.scan(/<span dir=ltr>(.*)<\/span/) do |match|
puts match
end
Как уже упоминалось,. * Обычно жадный (и я ожидал, что это придется учитывать), но, похоже, при использовании в сканировании вы не получаете жадного поведения. Мне удалось сопоставить несколько из этих шаблонов в одном документе.