[英]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 .这是一个正则表达式演示。
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.