R:如何用小写字母替换最后一个点之后的某些字符

问题描述 投票:1回答:4

一个简单的问题,但我无法解决。我收到了一个类似于此邮件地址的字符串:

ma <-"[email protected]"

我的目标是获得:

"[email protected]"

因此将小数点放在最后一个点之后。我已经读过thisthis,所以我尝试了:

gsub(".*\\.","\\L\\1", ma, perl = T) 
[1] "COM" # nope

也类似:

library(gsubfn)
options(gsubfn.engine = "R")
gsubfn(".*\\.", ~ tolower(x), ma)
[1] "[email protected]" # nope

我很困惑,因为看来我可以提取要替换的部分:

gsub(".*\\.","", ma)
[1] "COM"

但是我不能正确更换它。如果您可以提供解决方案的说明,我们将不胜感激,正则表达式不是我最强大的功能。

r regex
4个回答
4
投票

[\\L\\U应用于capturing group-您的第一次尝试已结束,但没有说明将命令应用于哪个组:]]

ma <-"[email protected]"
gsub('(.*\\.)(.*)$', '\\1\\L\\2', ma, perl = TRUE)
# [1] "[email protected]"

请注意,我们捕获了两个组-部分[[before

(包括).,我们单独留待;和部分[[after .,我们将其移至小写。还请注意,使用此正则表达式可能会更安全,以防止贪婪匹配.的任何问题:gsub('(.*\\.)([^.]*)$', '\\1\\L\\2', ma, perl = TRUE) # [1] "[email protected]"

4
投票

2
投票

1
投票
s <- "[email protected]" # 1 library(gsubfn) gsubfn("\\.[^.]*$", tolower, s) ## [1] "[email protected]" # 2 library(tools) ext <- file_ext(s) sub(paste0(ext, "$"), tolower(ext), s) ## [1] "[email protected]"
© www.soinside.com 2019 - 2024. All rights reserved.