#r #regex
Вопрос:
Мой шаблон строки выглядит следующим образом:
1233 Фокс-стрит, Омаха, штат
Нью-Йорк ,69131-7233 Джеффри Джонс, 666 Черч-стрит, Омаха ,штат
Нью-Йорк, 69131-72339 Бетти Дэвис, ООО, бульвар Алоха ,334 ,Форт-Коллинз КО, 84444-00333
, 1233 Декер-стрит, Омаха ,штат Нью-Йорк, 69131-7233
Мне нужно разделить приведенную выше строку на четыре переменные: имя, адрес, город_стат, почтовый индекс.
Поскольку шаблон содержит от трех до четырех запятых, я начинаю справа, чтобы разделить поле на несколько полей.
rubular.com говорит, что шаблон ("(,\d.........)$")))
или шаблон ",d.........$"
будут соответствовать почтовому коду в конце строки.
regex101.com, обнаруживает, что ни один из вышеперечисленных шаблонов не совпадает.
Когда я пытаюсь расстаться с:
#need to load pkg:tidyr for the `separate`
библиотека функций(tidyr)
отдельный(street_add, c(«street_add2», «zip», sep= («(,d………)$»)))
или с:
separate(street_add, c("street_add2", "zip", sep= (",d.........$")))
В обоих сценариях R разбивается на первую запятую в строке.
Как разделить строку на сегменты?
Спасибо.
Комментарии:
1. Re: цитирование
rubular.com
… Вы должны понимать, что синтаксис регулярных выражений в R отличается от синтаксиса некоторых других языков. Возможно, у Руби та же странность, что и у R (я не знаю, так ли это), но если это так, вы должны так сказать. В противном случае вам следует полагаться на специальные полномочия R, например, на код для шаблонов R-регулярных выражений.
Ответ №1:
Воспользуйся
sep=",(?=[^,]*$)"
См.Доказательство регулярного выражения.
объяснение
--------------------------------------------------------------------------------
, ','
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
[^,]* any character except: ',' (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
$ before an optional n, and the end of
the string
--------------------------------------------------------------------------------
) end of look-ahead
Комментарии:
1. Рышард: Спасибо за код и объяснение. 🙂
2. Спасибо тебе, Рышард. Я все еще учусь здесь ориентироваться.
3. Этот веб-сайт полезен только в том случае, если пользователь, использующий его, понимает, что R нуждается в модификациях для escape-последовательностей.