#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Есть строка: ggSuQNs6TxOTuQDd0j 4sA==$QO/Mq2jwfe3jgsGGoIGmlg==
. Мне нужно преобразовать его в ggSuQNs6TxOTuQDd0j4sAQOMq2jwfe3jgsGGoIGmlg
(только буквы и цифры). Затем обрежьте его до 13 символов ggSuQNs6TxOTu
и вставьте после 3 символов первую половину числа цифр, вставьте после 9 символов вторую половину числа цифр. Например, есть число 3243
и строка ggSuQNs6TxOTu
. После того, как ggS32uQNs436TxOTu
Мой английский плохой), надеюсь, вы меня понимаете.
Комментарии:
1. Как вы пытались это решить?
2. Да, любой код или любая идея, с чего начать? Посмотрите на метод регулярных выражений и
gsub
строк, это было бы началом.3. Похоже, что 2 строки base64 объединены вместе. Вы уверены, что хотите удалить символы, не являющиеся словами, и сделать строку ничего не значащей?
4. @Alex Golubenko пытался использовать разделение с регулярным выражением
Ответ №1:
Вот моя попытка, как я мог понять из вашего вопроса (позвольте мне ознакомиться с каждым вашим предложением).
Ваша строка:
s = "ggSuQNs6TxOTuQDd0j 4sA==$QO/Mq2jwfe3jgsGGoIGmlg=="
Шаг-1
Мне нужно преобразовать его в «ggSuQNs6TxOTuQDd0j4sAQOMq2jwfe3jgsGGoIGmlg» (только буквы и цифры).
только символы и цифры:
> transform_string = s.tr('^A-Za-z0-9', '')
#=> "ggSuQNs6TxOTuQDd0j4sAQOMq2jwfe3jgsGGoIGmlg"
Шаг -2
Затем обрежьте его до 13 символов «ggSuQNs6TxOTu»
извлеките первые 13 символов следующим образом:
> thirteen_chrs = transform_string[0..12]
#=> "ggSuQNs6TxOTu"
Шаг 3 (из вашего примера)
number = 3242
Шаг-4
после 3 символов — первая половина числа цифр, вставьте после 9 символов вторую половину числа цифр.
вот встроенный код для того же:
> thirteen_chrs.insert(3, number.to_s.chars.each_slice(2).map(amp;:join).first).insert(9, number.to_s.chars.each_slice(2).map(amp;:join).last)
#=> "ggS3232uQ42Ns6TxOTu"
Я надеюсь, что это может вам помочь 🙂