как получить текст между: и строкой? - PullRequest
2 голосов
/ 04 октября 2009

У меня есть куча строк в массиве в виде:

["name: hi", "pw: lol"]

Как я могу извлечь только часть после точки с запятой и пробела в Ruby?

Ответы [ 5 ]

7 голосов
/ 04 октября 2009
["name: hi", "pw: lol"].map{|x| x.split(': ')[1]}

производит:

["hi", "lol"]
4 голосов
/ 04 октября 2009

Предложения Гарретта и Питера определенно помогут. Однако, если вы хотите, вы можете пойти дальше и легко превратить это в хеш.

values = ["name: hi", "pw: lol"]
hash = Hash[*values.map{|item| item.split(/\s*:\s*/)}.flatten]
# => {"name"=>"hi", "pw"=>"lol"}

Во второй строке много информации, поэтому позвольте мне указать на несколько улучшений:

  • Разделение допускает гибкость в двоеточии, позволяя использовать любое количество пробелов как до, так и после.
  • После вызова map у нас есть массив [["name", "hi"], ["pw", "lol"]]
  • Hash#[] принимает список значений, которые будут отображаться как ключ, значение, ключ, значение, ... В результате нам нужно сгладить сопоставленный массив для передачи в Hash#[]

Поскольку я не знаю ваших точных потребностей, я не могу сказать, хотите ли вы хэш или нет, но приятно иметь такую ​​возможность.

1 голос
/ 04 октября 2009

Я предлагаю вам использовать регулярные выражения для обработки строк, хотя предыдущие ответы работают

a = ["name: hi", "pw: lol"]

a.map {| пункт | item.match (/ \ ш +: ([\ Ш \ с] +) /) [1]}

это выдаст:

=> ["hi", "lol"]

1 голос
/ 04 октября 2009

Вы можете просмотреть их и разделить на :, например, так:

["name: hi", "pw: lol"].each do |item|
    puts item.split(":").last.lstrip
end

Пример:

>> a = ["name: hi", "pw: lol"]
=> ["name: hi", "pw: lol"]
>> a.each do |item|
?> puts item.split(":").last.lstrip
>> end

>> hi
>> lol
0 голосов
/ 21 января 2012
a.to_s
     h=hi~=a

a.index[h].value

или

hi{1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...