Нахождение второго пробела после каждой запятой - PullRequest
5 голосов
/ 25 октября 2019

Это продолжение этого вопроса: Объединить предыдущие и последние слова со словом, которое соответствует условию в R

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

vector <- c("Paulsen", "Kehr,", "Diego", 
            "Schalper", "Sepúlveda,", "Alejandro",
             "Von Housen", "Kush,", "Terry")

X <- paste(vector, collapse = " ")
X

## this is the string I am looking to split:
"Paulsen Kehr, Diego Schalper Sepúlveda, Diego Von Housen Kush, Terry"

Второй пробел после каждой запятой является критерием для моего . Итак, мой вывод будет:

"Paulsen Kehr, Diego"
"Schalper Sepúlveda, Alejandro"
"Von Housen Kush, Terry"

Я создал шаблон, но он не совсем работает.

[^ ]+ [^ ]+, [^ ]+( )

Использование его с strsplit удаляет все слова вместорасщепление только в группе 1 (т.е. [^ ]+ [^ ]+, [^ ]+(group-1)). Я думаю, что мне просто нужно исключить полный матч и совпадать с пробелом только после. - regex demo

strsplit(X, "[^ ]+ [^ ]+, [^ ]+( )")

# [1] "" [2] "" [3] "Von Housen Kush, Terry"

Кто-нибудь может подумать о для поиска второго пробела после каждой запятой

1 Ответ

7 голосов
/ 25 октября 2019

Вы можете использовать

> strsplit(X, ",\\s+\\S+\\K\\s+", perl=TRUE)
[[1]]
[1] "Paulsen Kehr, Diego"           "Schalper Sepúlveda, Alejandro" "Von Housen Kush, Terry"

См. Демоверсию regex

Подробности

  • ,- запятая
  • \s+ - 1+ пробелов
  • \S+ - 1+ непробелов
  • \K - оператор сброса совпадений, отбрасывающий весь сопоставленный текст
  • \s+ - 1+ пробелов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...