Как извлечь цифры из строки и преобразовать их в целое число - PullRequest
3 голосов
/ 27 сентября 2019

Как убрать пробел между 2 числами?У меня есть строка "1 026 personnes aiment ça", и я хотел бы получить только 1026 (как целое число)

Моя попытка:

text = "1 026 personnes aiment ça"
# => "1 026 personnes aiment ça"
z = text.split(' ').first
# => "1 026"
z.to_i
# => 1
z.strip
# => "1 026"
z.class
# => String

Ответы [ 5 ]

3 голосов
/ 27 сентября 2019

Метод #gsub может заменить все нецифровые символы в строке, а затем вы можете преобразовать его в целое число с #to_i:

"1 026 personnes aiment ça".gsub(/\D/, "").to_i
#~> 1026
1 голос
/ 28 сентября 2019
"1 026 personnes aiment ça".gsub(' ', '').to_i
=> 1026
1 голос
/ 27 сентября 2019

Вы можете попробовать это, это работа для меня

(?<=\d) +(?=\d+(?:\s|$))
0 голосов
/ 27 сентября 2019

Я бы использовал регулярные выражения (имейте в виду, что это может стать медленным, если вы делаете много итераций)

'1 026 personnes aiment ça'.match(/\d{1,3} \d{1,3}/)
                           .to_s
                           .tr(' ','')
                           .to_i
# => 3123

Это будет:

  • соответствует первым 2группы из 3 или менее чисел
  • преобразуют его в строку (у MatchData есть метод только для преобразования результата в строку или массив)
  • замена пробелов пустой строкой
  • преобразовать строку в целое число

    '1 026 человек aiment ça'.match (/ \ d {1,3} \ d {1,3} /)

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

Например;если вы ожидаете, что первый символ строки будет цифрой, я бы добавил ^ (обозначает начало строки).

'1 026 personnes aiment ça'.match(/^\d{1,3} \d{1,3}/)
                           .to_s
                           .tr(' ','')
                           .to_i
0 голосов
/ 27 сентября 2019

Для вашего примера вы можете сделать:

text = "1 026 personnes aiment ça"
z = text.split(' ')
z = z[0]+ z[1]
z.to_i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...