簡體   English   中英

使用 gsub() 替換除某些子字符串之后的所有數字

[英]Using gsub() to replace all numbers except after certain substrings

假設我們有:

TestStrings <- c("Some number < 100", "Some number > 999", "Some number $1000", "Some number 1000000")

我想用空格替換所有數字,除了子字符串后面的數字:

"< \\d+"   "> \\d+"   "$\\d+"

我可以在函數gsub()編寫什么正則表達式來完成這樣的任務。

我知道以下代碼是錯誤的,但這是我所擁有的。

gsub(pattern = "^> \\d+|^< \\d+|^$\\d+", replace = " ", TestStrings)

我們可以使用以下模式:

[a-z]\s*\K\d+

這是一個正則表達式演示

,它將是:

gsub("[a-z]\\s*\\K\\d+", "", TestStrings, perl = T)

 # [1] "Some number < 100"   "Some number > 999"
 # [3] "Some number $1000"   "Some number "

也許這有幫助

gsub("[<>] \\d+(*SKIP)(*FAIL)|\\d+", " ", TestStrings, perl = TRUE)
#[1] "Some number < 100" "Some number > 999" "Some number $ "    "Some number  "

如果我們不需要$

gsub("[<>] \\d+(*SKIP)(*FAIL)|\\$*\\d+", " ", TestStrings, perl = TRUE)
#[1] "Some number < 100" "Some number > 999" "Some number  "     "Some number  "    

如果我們需要$和數字

gsub("([<>] |\\$)\\d+(*SKIP)(*FAIL)|\\d+", " ", TestStrings, perl = TRUE)
#[1] "Some number < 100" "Some number > 999" "Some number $1000" "Some number  "    

那這個呢:

gsub("[<>\\$] ?\\d+", " ", TestStrings)

它返回:

[1] "Some number  "       "Some number  "       "Some number  "       "Some number 1000000"

我認為這就是你要找的。

編輯實際上你想要相反的,所以

gsub("([<>\\$] ?\\d+)|\\d+", "\\1", TestStrings) 
[1] "Some number < 100" "Some number > 999" "Some number $1000" "Some number "

暫無
暫無

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

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