一个简单的问题,但我无法解决。我得到了一个像这个邮件地址这样的字符串:
ma <- "something@somewhere.COM"
Run Code Online (Sandbox Code Playgroud)
我的目标是获得:
"something@somewhere.com"
Run Code Online (Sandbox Code Playgroud)
所以把最后一个点之后的部分放在小写。我读过this,this,所以我试过:
gsub(".*\\.","\\L\\1", ma, perl = T)
[1] "COM" # nope
Run Code Online (Sandbox Code Playgroud)
还有类似的东西:
library(gsubfn)
options(gsubfn.engine = "R")
gsubfn(".*\\.", ~ tolower(x), ma)
[1] "something@somewhere.COM" # nope
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我似乎可以获取我想要替换的部分:
gsub(".*\\.","", ma)
[1] "COM"
Run Code Online (Sandbox Code Playgroud)
但我无法正确更换它。如果您能给出解决方案的解释,我将不胜感激,正则表达式不是我最强大的功能。
\\L&\\U应用于捕获组- 您的第一次尝试很接近,但没有说明将命令应用于哪个组:
ma <-"something@somewhere.COM"
gsub('(.*\\.)(.*)$', '\\1\\L\\2', ma, perl = TRUE)
# [1] "something@somewhere.com"
Run Code Online (Sandbox Code Playgroud)
请注意,我们捕获了两个组——在之前(并包括)的部分.,我们不理会它;而部分之后的.,这是我们移动到小写。
另请注意,使用此正则表达式来防止任何贪婪匹配问题可能更安全.:
gsub('(.*\\.)([^.]*)$', '\\1\\L\\2', ma, perl = TRUE)
# [1] "something@somewhere.com"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |