Вставьте разделитель между числом с помощью Regex - PullRequest
1 голос
/ 10 октября 2019

У меня есть 20-значный номер. Что-то вроде: 000001001520081000000.

Но я должен превратить это в 00000100-15.2008.1.00.0000. После семи цифр я должен вставить -. Затем, после 2, я вставляю точку. Затем снова после четырех, одного и двух чисел.

Я пытался найти число следующим образом: d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d, а затем преобразовать в \d\d\d\d\d\d\d-\d\d.\d.\d\d\d\d.\d\d\d\d, но оно не работало.

Тогда я действительно не знаю, как это сделать. Я использую R, и я попытался с grep.

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

(\d{7})(\d{2})(\d{4})(\d)(\d{2})(\d{4})

Размещая группы захвата вокруг каждого из ваших интервалов, вы можете использовать gsub для вставки значений между совпадениями.

gsub(
  "(\\d{7})(\\d{2})(\\d{4})(\\d)(\\d{2})(\\d{4})", 
  "\\1-\\2,\\3,\\4,\\5,\\6", 
  "000001001520081000000", 
  perl=TRUE
)

[1] "0000010-01,5200,8,10,00000"

0 голосов
/ 13 октября 2019
tmp <- as.character("000001001520081000000")
tmp2 <- paste0(substr(tmp, 1, 8),
               "-",
               substr(tmp, 9, 10),
               ".",
               substr(tmp, 11, 14),
               ".",
               substr(tmp, 15, 15),
               ".",
               substr(tmp, 16, 17),
               ".",
               substr(tmp, 18, nchar(tmp)))
tmp2

Выход:

[1] "00000100-15.2008.1.00.0000"

...