отдельный (dplyr) с ключевыми промежуточными символами (после пробела и до заглавной буквы) - PullRequest
0 голосов
/ 26 июня 2019

Я хочу dplyr:: разделить на минус (-), который должен быть после пробела и перед заглавной буквой.

Мое регулярное выражение [\s]-[A-Z] включает пробел и заглавную букву, следовательно, удаляется путем разделения. Я только хочу использовать минус в этом конкретном месте для разделения, не избавляясь от пробела и следующей буквы.

library(dplyr)

data.frame(x = c("Hans-Peter Wurst -My Gosh", "What is -wrong here -Do not worry")) %>% 
  separate(x, into = c("one", "two"), sep = "[\\s]-[A-Z]")

Результат:

#                   one         two
# 1    Hans-Peter Wurst      y Gosh
# 2 What is -wrong here o not worry

Желаемый результат будет:

#                   one          two
# 1    Hans-Peter Wurst      My Gosh
# 2 What is -wrong here Do not worry

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

Вы можете заключить шаблон заглавных букв в вид сзади / lookahead

sep = "(?<!\\S)-(?=[A-Z])"

или, если - в начале строки необходимо исключить, используйте

sep = "(?<=\\s)-(?=[A-Z])"

См. Демонстрационную версию regex

Поскольку lookarounds являются утверждениями нулевой ширины, которые не используют текст (соответствующий текст не попадает в общее значение соответствия, он толькопроверяет соответствие шаблона и возвращает истину или ложь) буква будет сохранена в выводе.

Подробности

  • (?<=\s) - положительный взгляд за этимтребуется пробел слева от текущего местоположения
  • (?<!\S) - отрицательный взгляд сзади, требующий начала строки или пробела слева от текущего местоположения
  • - - дефис
  • (?=[A-Z]) - положительный прогноз, требующий прописной буквы ASCII сразу справа от текущего местоположения.
2 голосов
/ 26 июня 2019

Мы можем использовать extract, где мы собираем символы как группу ((..)). оставив эти символы не нужными из скобок

library(tidyverse)
data.frame(x = c("Hans-Peter Wurst -My Gosh", 
               "What is -wrong here -Do not worry")) %>%
     extract(x, into = c("one", "two"), "(.*) -([^-]+)$")
#                 one          two
#1    Hans-Peter Wurst      My Gosh
#2 What is -wrong here Do not worry
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...