在最接近某个字符编号的完整单词处剪切字符串

时间:2017-07-19 14:01:26

标签: r string

我正在尝试根据以下标准将字符串向量分成两部分(我只想保留第一部分):

  • 它应该在一个完整的单词之后分开(即空格出现的地方)
  • 它应该在最接近第12个字符的空间切割

示例:

textvec <- c("this is an example", "I hope someone can help me", "Thank you in advance")

预期结果是这样的矢量:

"this is an" , "I hope someone", "Thank you in"

到目前为止我尝试了什么: 我能够得到之前或第12个字符的完整单词,如下所示:

t13 <- substr(textvec , 1, 13) #gives me first 13 characters of each string
lastspace <- lapply(gregexpr(" ", t13), FUN=function(x) x[length(x)]) #gives me last space before/at 13th character
result <- substr(t13, start=1, stop=lastspace)

但我想要的是包括最接近第12个字符的单词(例如上面例子中的“某人”),不一定在第12个字符之前或第12个字符。如果有平局,我想在第12个字符后面加上这个词。我希望我能清楚地解释自己:)

2 个答案:

答案 0 :(得分:3)

使用cumsum

sapply(strsplit(textvec, ' '), function(i) paste(i[cumsum(nchar(i)) <= 12], collapse = ' '))

#[1] "this is an"     "I hope someone" "Thank you in"

答案 1 :(得分:2)

我们可以使用gregexpr在12处找到最近的空格,然后用substr剪切字符串

substr(textvec, 1, sapply(gregexpr("\\s+", textvec), 
            function(x) x[which.min(abs(12 - x))])-1)
#[1] "this is an"     "I hope someone" "Thank you in"