我希望使用 stringr
软件包来删除不符合字符串模式的所有字符。到目前为止,我已经通过使用"\\w+(?= (grape|satsuma))"
作为模式来删除模式之前的字符,但是删除模式之后的字符仍然不可能。
> str_remove_all("apples grape banana melon olive persimon grape apples satsuma papaya",
+ "\\w+(?= (grape|satsuma))")
[1] " grape banana melon olive grape satsuma papaya"
期望的结果是:
"grape grape satsuma"
(注意:我知道在这种情况下最简单的方法是仅提取“grape”和“satsuma”,但为了分析目的,我更喜欢这种方式)
编辑提供整个问题
整个问题如下,给定一个包含一个字符串列的d
数据框,函数应该返回相同的列,只有匹配项:
> d
# A tibble: 2 x 2
string_column c2
<chr> <dbl>
1 apples grape banana satsuma 3
2 grape banana satsuma melon 4
使用@d.r提供的答案:
> d %>%
+ mutate_at(vars(string_column), ~ gsub("(grape|satsuma| )(*SKIP)(*FAIL)|.", "", ., perl = TRUE))
# A tibble: 2 x 2
string_column c2
<chr> <dbl>
1 " grape satsuma" 3
2 "grape satsuma " 4
到目前为止,使用
stringr
包提供的所有答案都无法返回 string_column
。以下是
d
的 dput
:d <- structure(list(string_column = c("apples grape banana satsuma",
"grape banana satsuma melon"), c2 = c(3, 4)), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))
gsub("(grape|satsuma| )(*SKIP)(*FAIL)|.", "", "apples grape banana melon olive persimon grape apples satsuma papaya", perl = TRUE)
- d.bstringr
包,你有什么想法吗? - Tito Sanzstr_remove_all
和"\\w+(?= (grape|satsuma))"
作为模式,删除在grape
或satsuma
之前的单词。我的期望结果是str_remove_all
删除不匹配papaya
或satsuma
的所有内容,因此在这种情况下期望的结果是:"grape grape satsuma"。如果目的不够清晰,请告知。 - Tito Sanz