一个简单的问题,但我无法解决。我收到了一个类似于此邮件地址的字符串:
ma <-"[email protected]"
我的目标是获得:
"[email protected]"
因此将小数点放在最后一个点之后。我已经读过this,this,所以我尝试了:
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"
但是我不能正确更换它。如果您可以提供解决方案的说明,我们将不胜感激,正则表达式不是我最强大的功能。
[\\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]"
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]"