假设我们有以下字符串。
str <- '<a><b><c>';
我需要拆分它,以便输出是'a'
,'b'
,'c'
的矢量。
基本上我可能需要一个RegEx拆分功能,它从原始字符串中取出<(*)>
的实例并将它们添加到一个新的矢量中。
答案 0 :(得分:4)
str <- '<a><b><c>'
str <- gsub('<|>','',str)
str <- unlist(strsplit(str,'',fixed=TRUE)) # or: strsplit(str,'',fixed=TRUE)[[1]]
给出:
> str
[1] "a" "b" "c"
回应你的评论:
str2 <- '<ab><bc><cd>'
str2 <- unlist(strsplit(str2,'><',fixed=TRUE)) # or: strsplit(str2,'><',fixed=TRUE)[[1]]
str2 <- gsub('<|>','',str2)
给出:
> str2
[1] "ab" "bc" "cd"
答案 1 :(得分:2)
1)strsplit / gsub 删除<
个字符,然后按>
分割。 (人们可能已经预料到这会在结尾处留下零字符组件,但幸运的是,由于strsplit
的工作方式不会发生这种情况。)此解决方案特别短,不使用任何包。
unlist(strsplit(gsub("<", "", str), ">"))
## [1] "a" "b" "c"
2)scan / chartr 用空格替换<
和>
个字符,然后使用扫描读取剩下的内容。此解决方案不使用任何包,特别简单,但取决于不包含空格的字段:
scan(textConnection(chartr("<>", " ", str)), what = "", quiet = TRUE)
## [1] "a" "b" "c"
3)gsubfn包中的strapplyc strapplyc
提取与正则表达式匹配的字段。 (stringr包也提供了类似的功能,而base R提供了regmatches
,它也可以做到这一点,但有点笨拙。)这个解决方案很短但确实使用了包。
library(gsubfn)
strapplyc(str, "[^<>]+", simplify = c)
[1] "a" "b" "c"
答案 2 :(得分:1)
首先,strsplit
'&gt;&lt;'换别的。我选择了一个空间。这是您稍后strsplit
的内容。然后,删除'&gt;'和'&lt;'。然后你可以unlist
在太空中。如果需要,请使用str1 <- '<a><b><c>';
str1 <-gsub('><',' ',str1)
str1 <-gsub('>|<','',str1)
strsplit(str1,' ')
#"a" "b" "c"
。
GIDSignIn.sharedInstance().allowsSignInWithWebView = false
GIDSignIn.sharedInstance().allowsSignInWithBrowser = false
答案 3 :(得分:1)
您可以使用strsplit
和正则表达式/[<>]+/
进行拆分,然后使用lapply
过滤掉所有空结果:
str <- '<ab><bc><cd>'
unlist(lapply(strsplit(str,"[<>]+"), function(x){x[!x ==""]}))
//[1] "ab" "bc" "cd"
或者只是删除第一个空arg:
unlist(strsplit(str,"[<>]+"))[-1]
//[1] "ab" "bc" "cd"
答案 4 :(得分:1)
我们可以使用str_extract_all
library(stringr)
str_extract_all(str2, '[a-z]+')[[1]]
#[1] "ab" "bc" "cd"