gsub R 中维度的重复模式

gsub a repetitive pattern of dimensions in R

我想要 gsub R 中字符串中提到的尺寸模式。例如:

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

预期输出:

"inch box"
"pipe"
"asd"

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

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

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

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

您可以使用

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"   

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

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