Разбить строку на число, сохранив номер - PullRequest
8 голосов
/ 22 января 2011

У меня есть строка, которая всегда будет по крайней мере числом, но также может содержать буквы до и / или после числа:

"4"
"Section 2"
"4 Section"
"Section 5 Aisle"

Мне нужно разбить строку следующим образом:

"4" becomes "4"
"Section 2" becomes "Section ","2"
"4 Aisle" becomes "4"," Aisle"
"Section 5 Aisle" becomes "Section ","5"," Aisle"

Как я могу сделать это с Ruby 1.9.2?

Ответы [ 2 ]

18 голосов
/ 22 января 2011

String#split будет сохранять любые группы из регулярного выражения разделителя в массиве результатов.

parts = whole.split(/(\d+)/)
2 голосов
/ 22 января 2011

Если вам не нужны пробелы в разделителях, и вы хотите иметь согласованный дескриптор до / после, используйте это:

test = [
  "4",
  "Section 2",
  "4 Section",
  "Section 5 Aisle",
]

require 'pp'
pp test.map{ |str| str.split(/\s*(\d+)\s*/,-1) }
#=> [["", "4", ""],
#=>  ["Section", "2", ""],
#=>  ["", "4", "Section"],
#=>  ["Section", "5", "Aisle"]]

Таким образом, вы всегда можете сделать:

prefix, digits, suffix = str.split(/\s*(\d+)\s*/,-1)
if prefix.empty?
  ...
end

... вместо проверки длины ваших матчей или чего-то подобного.

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