繁体   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