извлечь слово двоеточие пробел несколько слов - PullRequest
0 голосов
/ 23 октября 2018

Мне нужно извлечь два шаблона из текстового поля. Один - «От: альфа-бета», а другой - «Кому: дельта геммы» из следующего фрейма данных.

df <- tibble(text=c("From: alpha beta", "To: gemma delta"))

Я использую это ..

from_pattern <- regex("[From]:\\s[alpha beta]")
to_pattern <- regex("[To]:\\s[gemma delta]")

df <- df%>% 
  mutate(to = if_else(str_detect(text, to_pattern), "to", NA_character_),
         from = if_else(str_detect(text, from_pattern), "from", NA_character_))

но я не получаю желаемого результата.Что мне здесь не хватает?Было бы здорово, если бы я получил вывод в одном столбце, например:

df <- tibble (text = c ("From: alpha beta", "To: gemma delta"), tofrom = c ("от", "до")) </p>

1 Ответ

0 голосов
/ 23 октября 2018

Предположим, вы хотите знать, начинается ли строка с From: или To::

df %>% mutate(tofrom = tolower(str_extract(text, '(?i)^(from|to)(?=: .*)')))

# A tibble: 2 x 2
#  text              tofrom
#  <chr>             <chr> 
#1 From: gemma delta from  
#2 To: alpha beta    to 

Здесь используется модификатор (?i), чтобы игнорировать регистр, чтобы сделать сопоставление более общим, а затем сопоставитьслово from или to от начала строки, за которым следует :.

Если вам нужно точно соответствовать шаблону:

df %>% mutate(tofrom = tolower(str_extract(text, '(?i)^(from(?=: gemma delta$)|to(?=: alpha beta$))')))
# A tibble: 2 x 2
#  text              tofrom
#  <chr>             <chr> 
#1 From: gemma delta from  
#2 To: alpha beta    to
...