【问题标题】:Splitting a string that has a not-space hyphen拆分具有非空格连字符的字符串
【发布时间】:2021-12-12 02:32:31
【问题描述】:

我有如下字符串:

2 - 5-< 2
6 - 10-< 2
6 - 10-2 - 5
> 15-2 - 5

我想在 - 之前或之后都没有空格的地方拆分这些字符串。因此,上面的字符串将按如下方式拆分:

"2 - 5" "< 2"
"6 - 10" "< 2"
"6 - 10" "2 - 5"
"> 15" "2 - 5"

在 R Studio 中,我尝试过使用 sub() 和 strsplit(),但我发现很难设置正确的正则表达式。有人知道吗?

【问题讨论】:

    标签: r regex regex-negation strsplit


    【解决方案1】:

    perl=TRUElookaround 一起使用:

    vec <- c("2 - 5-< 2", "6 - 10-< 2", "6 - 10-2 - 5", "> 15-2 - 5")
    strsplit(vec, "(?<! )-(?!= )", perl=TRUE)
    # [[1]]
    # [1] "2 - 5" "< 2"  
    # [[2]]
    # [1] "6 - 10" "< 2"   
    # [[3]]
    # [1] "6 - 10" "2 - 5" 
    # [[4]]
    # [1] "> 15"  "2 - 5"
    

    【讨论】:

      【解决方案2】:

      我想这是一个更容易理解的解决方案:

      library(stringr)
      str_split(vec, "(?<=\\d)-(?=\\d)")
      [[1]]
      [1] "2 - 5" "< 2"  
      
      [[2]]
      [1] "6 - 10" "< 2"   
      
      [[3]]
      [1] "6 - 10" "2 - 5" 
      
      [[4]]
      [1] "> 15"  "2 - 5"
      

      首先,不需要perl = TRUE(嗯,但需要一个新包,stringr)。 但是,(?&lt;=\\d)(?=\\d)positive 外观,本质上更容易处理。第一个意思是:如果你看到左边有一个数字……;第二个说,如果你在右边看到一个数字......并且str_split(带有下划线)说,如果这两个条件都满足,那么在破折号上拆分-

      【讨论】:

        猜你喜欢
        • 2023-01-26
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-16
        相关资源
        最近更新 更多