使用gsub代替strsplit或scan

使用gsub代替strsplit或scan,r,split,R,Split,是否有其他方法可以拆分字符串而不是使用 unlist(strsplit("1.2.3", "[.]")) scan(text="1.2.3", what="", sep=".") gsub和sub.sub是惰性的,所以只在模式的第一次出现时(从左到右)工作。Gsub(全球分部)将处理所有这些问题 > sub("asdkd_kasd_ads", pattern = "_", replacement = "") [1] "asdkdkasd_ads" > sub("asdkd_kasd

是否有其他方法可以拆分字符串而不是使用

unlist(strsplit("1.2.3", "[.]"))
scan(text="1.2.3", what="", sep=".")

gsub和sub.sub是惰性的,所以只在模式的第一次出现时(从左到右)工作。Gsub(全球分部)将处理所有这些问题

> sub("asdkd_kasd_ads", pattern = "_", replacement = "")
[1] "asdkdkasd_ads"
> sub("asdkd_kasd_ads", pattern = "_.*", replacement = "")
[1] "asdkd"
> gsub("asdkd_kasd_ads", pattern = "_", replacement = "")
[1] "asdkdkasdads"
> gsub("asdkd_kasd_ads", pattern = "_.*", replacement = "")
[1] "asdkd"
或者在您的情况下:

> gsub("1.2.3", pattern = "\\.", replacement = " ")
[1] "1 2 3"

在基本包中的R模式匹配函数中(请参见
?gsub
),这里使用的是
gregexpr
。它将识别非
字符块的开始和结束位置,然后您可以使用
regmatches
重新构建它们:

x <- "1.2.3.4as.zz2.zzxd3"

regmatches(x, gregexpr("[^.]+", x))[[1]]
# [1] "1"     "2"     "3"     "4as"   "zz2"   "zzxd3"

x为什么?您给出的解决方案有什么问题?扫描线对我不起作用。@KarlForner有什么错误?它对我有用。克劳斯-这只是好奇还是你有一个用例,你给出的合理的建议实际上不起作用?速度是个问题吗?你有一个超级、超级、超长的字符串吗?现在你编辑了它,它当然可以工作了……是不是
stru-split
from
stringr
太明显了?这并不能回答问题。请回答flodel最后的评论。