2017-08-11 73 views
2

我想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*。我怎樣才能使它成爲重複的模式匹配?

回答

4

更換圖案的一部分可以用量詞重複。如果您需要量化一組模式,請使用分組結構並將量詞應用於結構。

您可以使用

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" 
3

我們可以做sub匹配後面緊跟着空格(\\s+)一個或多個數字(\\d+)字符(.*)和空白("

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

備選的正則表達式的是基團數 「\ d」 和 「x」 允許在缺乏與某些字符的以及用「*」丟失最後一位的可能性,這個模式用「()+」進行包裝可以使模式無限重複。

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