【问题标题】:gsub a repetitive pattern of dimensions in Rgsub R中尺寸的重复模式
【发布时间】:2017-08-11 10:22:40
【问题描述】:

我想gsub R 中的字符串中提到的维度模式。例如:

"16 x 13 x 12 inch box"
"1x2x3 pipe" 
"123x 23 x334 asd"

预期输出:

"inch box"
"pipe"
"asd"

到目前为止我得到的是这个表达式:[0-9]*\\s*x\\s*。如何使它成为重复的模式匹配?

【问题讨论】:

    标签: r regex gsub


    【解决方案1】:

    模式的一部分可以用量词重复。如果您需要量化一组模式,请使用分组构造并将量词应用于构造。

    你可以使用

    sub("^[0-9]+(?:\\s*x\\s*[0-9]+)+\\s*", "", x)
    

    regex demo

    详情

    • ^ - 字符串的开头
    • [0-9]+ - 1 位或多位数字
    • (?: - 匹配以下连续子模式的非捕获组的开始:
      • \\s* -0+ 空格
      • x - 一个x
      • \\s* -0+ 空格
      • [0-9]+
    • )+ - ...1 次或更多次
    • \\s* -0+ 空格。

    R demo

    x <- c("16 x 13 x 12 inch box", "1x2x3 pipe", "123x 23 x334 asd")
    sub("^[0-9]+(?:\\s*x\\s*[0-9]+)+\\s*", "", x)
    ## => [1] "inch box" "pipe"     "asd"   
    

    【讨论】:

      【解决方案2】:

      我们可以使用sub 来匹配字符 (.*) 后跟一个或多个数字 (\\d+) 后跟空格 (\\s+) 并将其替换为空白 (")

      sub(".*\\d+\\s+", "", v1)
      #[1] "inch box" "pipe"     "asd"    
      

      【讨论】:

        【解决方案3】:

        另一种正则表达式,将数字“\d”和“x”分组,允许缺少某些字符与“?”以及用“*”丢失最后一位数字的可能性,用“()+”包装这个模式允许模式无限重复。

        sub("(\\d+ ?x ?\\d* ?)+", "", x)
        [1] "inch box" "pipe"     "asd" 
        

        【讨论】:

          猜你喜欢
          • 2014-09-29
          • 2021-07-26
          • 1970-01-01
          • 1970-01-01
          • 2021-05-14
          • 2020-07-11
          • 1970-01-01
          • 2019-11-17
          • 1970-01-01
          相关资源
          最近更新 更多