簡體   English   中英

正則表達式模式后面跟着字母“k”

[英]regex pattern a few numbers followed by the letter “k”

我想用000替換字符串中的k。例如,我想從“£50k”中賺取“£50000”。 請注意,該功能可以應用於“£50k king”這樣的情況,這將導致“£50000 king”。

這是我到目前為止所擁有的:

replace_k = function(data){
data = gsub("^[0-9]k", "[0-9]000", data)
return(data)
} 

怎么樣

data = gsub("([0-9]+)k", "\\1000", data)

您可以使用以下解決方案來處理KMG (如果需要,可以使用更多,只需調整ToDigits函數):

> library(gsubfn)
> x <- "0.56K 50K 1.5M 56.56G"
> ToDigits <- function(s) {ifelse(s=="K", 1000, ifelse(s=="M", 1000000, 1000000000)) }
> gsubfn("(\\d*\\.?\\d+)([KMG])", function(y,z) as.numeric(y) * ToDigits(z), x)
[1] "560 50000 1500000 5.656e+10"

在這里, (\\\\d*\\\\.?\\\\d+)([KMG])捕獲0+位數, . 並且1+數字進入第1組,然后KMG進入第2組, gsubfn用於操縱找到的匹配,使得找到的數字與使用簡單助手ToDigits函數獲得的正確值ToDigits (如果K在第2組中,乘以1000 ,等等。)

為了使它不區分大小寫,您可以將上面的代碼調整為

> ToDigits <- function(s) {ifelse(tolower(s)=="k", 1000, ifelse(tolower(s)=="m", 1000000, 1000000000)) }
> gsubfn("(\\d*\\.?\\d+)([KMGkmg])", function(y,z) as.numeric(y) * ToDigits(z), x)
[1] "560 50000 1500000 5.656e+10"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM