Вопрос о регулярном выражении: отдельная строка в последней запятой в строке

#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-последовательностей.