R strsplit with multiple unordered split arguments?

前端 未结 4 725
说谎
说谎 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:22

    Actually strsplit uses grep patterns as well. (A comma is a regex metacharacter whereas a space is not; hence the need for double escaping the commas in the pattern argument. So the use of "\\s" would be more to improve readability than of necessity):

    > strsplit(test_1, "\\, |\\,| ")
    [[1]]
    [1] "abc" "def" "ghi" "klm"
    
    > strsplit(test_2, "\\, |\\,| ")
    [[1]]
    [1] "abc" "def" "ghi" "klm"
    

    Without using both \\, and \\, (note extra space that SO does not show) you would have gotten some character(0) values. Might have been clearer if I had written:

    > strsplit(test_2, "\\,\\s|\\,|\\s")
    [[1]]
    [1] "abc" "def" "ghi" "klm"
    

    @Fojtasek is so right: Using character classes often simplifies the task because it creates an implicit logical OR:

    > strsplit(test_2, "[, ]+")
    [[1]]
    [1] "abc" "def" "ghi" "klm"
    
    > strsplit(test_1, "[, ]+")
    [[1]]
    [1] "abc" "def" "ghi" "klm"
    

提交回复
热议问题