【发布时间】:2022-11-03 00:45:26
【问题描述】:
假设我有一个字符串:
StringA/StringB/StringC
有什么办法可以用/ 符号分割这个字符串,但把它保留在返回值中:
StringA
/StringB
/StringC
【问题讨论】:
假设我有一个字符串:
StringA/StringB/StringC
有什么办法可以用/ 符号分割这个字符串,但把它保留在返回值中:
StringA
/StringB
/StringC
【问题讨论】:
是的,向前看:(?=/)
library(stringr)
str_split(str, "(?=/)")
#[[1]]
#[1] "StringA" "/StringB" "/StringC"
与tidyr 分离功能同样有效:
tidyr::separate_rows(data.frame(str), str, sep = "(?=/)")
# str
#1 StringA
#2 /StringB
#3 /StringC
使用基本 R 的 strsplit,前瞻是 less straightforwards,但这很好用:
unlist(strsplit(str, "(?<=.)(?=[/])", perl = TRUE))
#[1] "StringA" "/StringB" "/StringC"
反过来:
unlist(strsplit(str, "(?<=/)", perl = TRUE))
#[1] "StringA/" "StringB/" "StringC"
【讨论】:
str_split(str, "(?<=/)")。
您可以尝试scan + gsub 如下所示
> scan(text = gsub("/", " /", "StringA/StringB/StringC"), what = "")
Read 3 items
[1] "StringA" "/StringB" "/StringC"
【讨论】:
与str_extract
library(stringr)
str_extract_all(str1, "/?[^/]+")[[1]]
[1] "StringA" "/StringB" "/StringC"
【讨论】: