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)
详细
-
^
- 字符串的开始 -
[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"