简体   繁体   English

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

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

Say we have:假设我们有:

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

I want to replace all numbers with a space except numbers following the substrings:我想用空格替换所有数字,除了子字符串后面的数字:

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

What Regular expression could I write in function gsub() to complete such a task.我可以在函数gsub()编写什么正则表达式来完成这样的任务。

I know the follow code is wrong but here is what I have.我知道以下代码是错误的,但这是我所拥有的。

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

We can use the following pattern:我们可以使用以下模式:

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

Here's a Regex Demo .这是一个正则表达式演示

In it would be:,它将是:

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

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

Perhaps this helps也许这有帮助

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

If we don't need the $如果我们不需要$

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

If we need the $ and the numbers如果我们需要$和数字

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

What about this:那这个呢:

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

It returns:它返回:

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

which I think is what you are looking for.我认为这就是你要找的。

EDIT Actually you want the opposite, so编辑实际上你想要相反的,所以

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