我需要从文本字段中提取两种模式,一种是" from : alpha beta“,另一种是" to : beta”,来自以下数据帧。
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“),tofrom = c("from","to"))
发布于 2018-10-23 07:19:54
假设您想知道字符串是以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
https://stackoverflow.com/questions/52938881
复制相似问题