2
比方說,我想將字符串X0_Y1_Z2
更改爲X0_Y1_Z1
,即將最後一個數字減1。我想它在R上下面的語句,這不起作用:如何在R中使用sub中的數字操作?
sub("(\\S+_\\S+_)\\S(\\d)", paste0("\\1", as.numeric("\\2")-1), "X0_Y1_Z2", perl=T)
我該怎麼辦呢?
比方說,我想將字符串X0_Y1_Z2
更改爲X0_Y1_Z1
,即將最後一個數字減1。我想它在R上下面的語句,這不起作用:如何在R中使用sub中的數字操作?
sub("(\\S+_\\S+_)\\S(\\d)", paste0("\\1", as.numeric("\\2")-1), "X0_Y1_Z2", perl=T)
我該怎麼辦呢?
如果你總是有這相同的格式的字符串,你只有1個最後一個數字遞減,使用簡單substring
:
> paste0(substring(s, 1, nchar(s)-1), as.numeric(substring(s, nchar(s))) - 1)
> [1] "X0_Y1_Z1"
爲了匹配字符串中的最後一位數塊,用[0-9]+$
正則表達式。要增加該值,請使用gsubfn
包。看一個例子代碼:
> library(gsubfn)
> s <- "X0_Y1_Z2"
> gsubfn('[0-9]+$', ~ as.numeric(x)-1, s)
[1] "X0_Y1_Z1"
如果您需要驗證字符串中,你做的方式,使用更多的團體和錨^
和$
需要整個字符串匹配的模式(「全字符串匹配」) :
> p <- "^(\\S+_\\S+_\\S)(\\d+)$"
> gsubfn(p, function(x1,x2) paste0(x1, as.numeric(x2)-1), s)
[1] "X0_Y1_Z1"
謝謝! gsubfn軟件包似乎有訣竅。我會用它。 – CodingButStillAlive
它可以是「X0_Y1_Z222」嗎?你還需要驗證字符串(你的模式似乎需要特定的模式)? –