R:逐渐把元音放回一根绳子里

时间:2016-05-26 14:45:43

标签: regex r string gsub

我要从字符串中删除元音:

> gsub("\\B[A,E,I,O,U,a,e,i,o,u]+", "", "string.example")
[1] "strng.exmpl"

此缩减字符串包含11个字符。让我们说我有12个字符的空间,所以我想把第一个元音放回字符串中:

> MyFunction(string="string.example", maxchar=12)
[1] "string.exmpl"

或者使用maxchar = 13我希望下一个元音也被放回去:

> MyFunction(string="string.example", maxchar=13)
[1] "string.exampl"

等等。关于我想要多长时间,我怎么能逐渐放回元音呢?

1 个答案:

答案 0 :(得分:1)

MyFunction <- function(string = 'string.example', maxchar = 12){

  originalLength <- nchar(string)

  while(nchar(string) > maxchar){
    # remove last vowel
    newstring <- gsub("(.*)[A,E,I,O,U,a,e,i,o,u](.*)", "\\1\\2", string)

    # If you run out of vowels to remove, error
    if(nchar(newstring) == nchar(string)) stop('No more vowels to remove but string still longer than maxchar') 

    string <- newstring

    #print(string)
  }

  return(string)
}

不是最整洁,但认为它做你想要的。我添加了一个检查来处理maxchar短于没有任何元音的字符串的情况。