Чтобы получить лучший ответ, вам нужно будет уточнить, в каком формате берутся значения AB, CD и Dollar, но вот решение, основанное на приведенном примере. Он использует регулярное выражение группировки ()
, чтобы захватить информацию, которую мы заинтересованы в (см. Нижняя часть ответа для более подробной информации)
text = p.css(".some_class").text
# one or more digits followed by a space followed by AB, capture the digits
ab = text.match(/(\d+) AB/).captures[0] # => "12"
# one of more non digits followed by a literal + followed by CD
cd = text.match(/(\d+\+) CD/).captures[0] # => "4+"
# digits or commas followed by "Dollars"
dollars = text.match(/([\d,]+) Dollars/).captures[0] # => "2,600"
Обратите внимание, что если нет совпадения, то String#match
возвращается nil
так, если значение может не существует, вам понадобится проверка, например
if match = text.match(/([\d,]+) Dollars/)
dollars = match.captures[0]
end
Дополнительное объяснение захватами
Чтобы соответствовать сумме АВ нам нужен образец /\d+ AB/
, чтобы определить правильную часть текста. Тем не менее, нас действительно интересует только числовая часть, поэтому мы окружаем ее скобками, чтобы мы могли ее извлечь. например
irb(main):027:0> match = text.match(/(\d+) AB/)
=> #<MatchData:0x2ca3440> # the match method returns MatchData if there is a match, nil if not
irb(main):028:0> match.to_s # match.to_s gives us the entire text that matched the pattern
=> "12 AB"
irb(main):029:0> match.captures
=> ["12"]
# match.captures gives us an array of the parts of the pattern that were enclosed in()
# in our example there is just 1 but there could be multiple
irb(main):030:0> match.captures[0]
=> "12" # the first capture - the bit we want
Посмотрите на документацию для MatchData, в частности, метод captures для более подробной информации.
Спасибо! для меня это нормально. Так что все работает нормально. –
Примечание: если нет совпадения, то это не то, что ваши переменные, например. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – mikej
Ах. Хорошо я понял. Итак, какой метод захвата? Потому что теперь он отлично работает без привязок для меня. –