GSUB尺寸R中的重复图案

GSUB尺寸R中的重复图案

问题描述:

我想gsub在河中的字符串提到例如尺寸的模式: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("^[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" 

我们可以做sub匹配后面紧跟着空格(\\s+)一个或多个数字(\\d+)字符(.*)和空白("

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

备选的正则表达式的是基团数 “\ d” 和 “x” 允许在缺乏与某些字符的以及用“*”丢失最后一位的可能性,这个模式用“()+”进行包装可以使模式无限重复。

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