R strsplit with multiple unordered split arguments?

前端 未结 4 751
说谎
说谎 2020-12-01 02:53

Given a character string

test_1<-\"abc def,ghi klm\"
test_2<-\"abc, def ghi klm\"

I wish to obtain

\"abc\"
\"def\"
\"         


        
4条回答
  •  半阙折子戏
    2020-12-01 03:25

    In case you don't like regular expressions, you can call strsplit() multiple times:

    strsplits <- function(x, splits, ...)
    {
        for (split in splits)
        {
            x <- unlist(strsplit(x, split, ...))
        }
        return(x[!x == ""]) # Remove empty values
    }
    
    strsplits(test_1, c(" ", ","))
    # "abc" "def" "ghi" "klm"
    strsplits(test_2, c(" ", ","))
    # "abc" "def" "ghi" "klm"
    

    Updated for the added example

    strsplits(test_1, c("[[:punct:]]","[[:space:]]"))
    # "abc" "def" "ghi" "klm"
    strsplits(test_2, c("[[:punct:]]","[[:space:]]"))
    # "abc" "def" "ghi" "klm"
    

    But if you are going to use regular expressions, you might as well go with @DWin's approach:

    strsplit(test_1, "[[:punct:][:space:]]+")[[1]]
    # "abc" "def" "ghi" "klm"
    strsplit(test_2, "[[:punct:][:space:]]+")[[1]]
    # "abc" "def" "ghi" "klm"
    

提交回复
热议问题