Вставьте дефис в номер - PullRequest
       0

Вставьте дефис в номер

0 голосов
/ 26 августа 2018

Я хочу конвертировать:

"890414.14.1422, 900515141092, 950616-12-5414"

до:

"890414-14-1422, 900515-14-1092, 950616-12-5414"

Как мне этого добиться?

Я пытался:

def format_ids(string)
  string.gsub(/(\d{6})[.-](\d{2})[.-](\d{4})/, '\1-\2-\3')
end

format_ids("890414.14.1422, 900515141092, 950616-12-5414")
# => "890414-14-1422, 900515141092, 950616-12-5414"

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

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

str = "890414.14.1422, 900515141092, 950616-12-5414"

str.delete('.-').
    gsub(/\d+/) { |s| "%s-%s-%s" % [s[0,6], s[6,2], s[8..-1]] }
  #=> "890414-14-1422, 900515-14-1092, 950616-12-5414"

, где

str.delete('.-')
  #=> "890414141422, 900515141092, 950616125414"
0 голосов
/ 26 августа 2018

Вы должны сделать разделители во входной строке необязательно :

- string.gsub(/(\d{6})[.-](\d{2})[.-](\d{4})/, '\1-\2-\3')
+ string.gsub(/(\d{6})[.-]?(\d{2})[.-]?(\d{4})/, '\1-\2-\3')

Обратите внимание на вопросительные знаки после разделителей, они делают свое дело.

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