Split a string every 5 characters

后端 未结 5 2124
情深已故
情深已故 2020-12-03 02:49

Suppose I have a long string:

\"XOVEWVJIEWNIGOIWENVOIWEWVWEW\"

How do I split this to get every 5 characters followed by a space?

相关标签:
5条回答
  • 2020-12-03 03:17

    You can try something like the following:

    s <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW" # Original string
    l <- seq(from=5, to=nchar(s), by=5) # Calculate the location where to chop
    
    # Add sentinels 0 (beginning of string) and nchar(s) (end of string)
    # and take substrings. (Thanks to @flodel for the condense expression)
    mapply(substr, list(s), c(0, l) + 1, c(l, nchar(s))) 
    

    Output:

    [1] "XOVEW" "VJIEW" "NIGOI" "WENVO" "IWEWV" "WEW"
    

    Now you can paste the resulting vector (with collapse=' ') to obtain a single string with spaces.

    0 讨论(0)
  • 2020-12-03 03:21

    Using sapply

    > string <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW"
    > sapply(seq(from=1, to=nchar(string), by=5), function(i) substr(string, i, i+4))
    [1] "XOVEW" "VJIEW" "NIGOI" "WENVO" "IWEWV" "WEW"  
    
    0 讨论(0)
  • 2020-12-03 03:27

    No *apply stringi solution:

    x <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW"
    stri_sub(x, seq(1, stri_length(x),by=5), length=5)
    [1] "XOVEW" "VJIEW" "NIGOI" "WENVO" "IWEWV" "WEW" 
    

    This extracts substrings just like in @Jilber answer, but stri_sub function is vectorized se we don't need to use *apply here.

    0 讨论(0)
  • 2020-12-03 03:31

    You can also use a sub-string without a loop. substring is the vectorized substr

    x <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW"
    n <- seq(1, nc <- nchar(x), by = 5) 
    paste(substring(x, n, c(n[-1]-1, nc)), collapse = " ")
    # [1] "XOVEW VJIEW NIGOI WENVO IWEWV WEW"
    
    0 讨论(0)
  • 2020-12-03 03:36

    Using regular expressions:

    gsub("(.{5})", "\\1 ", "XOVEWVJIEWNIGOIWENVOIWEWVWEW")
    # [1] "XOVEW VJIEW NIGOI WENVO IWEWV WEW"
    
    0 讨论(0)
提交回复
热议问题