如何转换电子邮件地址名称?例如,从“ ab_1@email.com”到“ VCSN@email.com”(元音辅音符号编号)

时间:2019-07-16 21:28:38

标签: r regex if-statement slice

我正在尝试分析r中的电子邮件地址名称(@符号之前的任何内容)以进行模式检测。我想将每个元素转换为表示形式。例如,“ ty_00@mail.com”将是“ CCSNN”(辅音-辅音符号编号)。我正在尝试使用ifelse()语句,但是它不起作用。也许功能会更好?但是我的编码技巧有些有限。

n =c('1','2','3','4','5','6','7','8','9','0')
v=c('a','e','i','o','u')
c=c('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z')
s=c("!","#","$","%","&","'","*","+","-","/","=","?","^","_","`","{")



string1= 'jack0_d'
data$string1 <- ifelse(data$string1 %in% n, "N","?" |
                       data$string1 %in% v, "V","?" |
                       data$string1 %in% c, "C","?" |
                       data$string1 %in% s, "S","?" )

'Error in ifelse(data$string1 %in% n, "N", "?" | data$string1 %in% v, "V",  : 
  unused arguments ("V", "?" | data$string1 %in% c, "C", "?" | data$string1 %in% s, "S", "?")'

'jack0_d'为CVCCNSC

2 个答案:

答案 0 :(得分:2)

chartr接受两个相同长度的字符串,并将第一个字符串中找到的第三个参数的每个字符转换为第二个字符串中的对应字符。负号表示chartr的字符范围,除非在末尾所以我们将其放在那里。不使用包或正则表达式。

input <- c('ab_1', 'ty_00', 'jack0_d')

L <- list(N = n, V = v, C = c, S = c(setdiff(s, "-"), "-"))
transl <- sapply(stack(L), paste, collapse = "")
chartr(transl[1], transl[2], input)
## [1] "VCSN"    "CCSNN"   "CVCCNSC"

更新

固定。

答案 1 :(得分:0)

%in%函数仅用于检查某物是否是向量的元素。要检查单个字符串,可以使用正则表达式。一种方法是像这样使用stringr。我们使用|分隔符折叠向量以指示“或”,然后替换为所需的字母。请注意,我在\\的符号前添加了s,因为某些符号在正则表达式中是特殊字符,但我们只想按字面意义将它们匹配。 (并不需要全部逃脱,但为了简单起见,我只是做了全部)

library(stringr)
n <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
v <- c("a", "e", "i", "o", "u")
c <- c("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z")
s <- c("\\!", "\\#", "\\$", "\\%", "\\&", "\\'", "\\*", "\\+", "\\-", "\\/", "\\=", "\\?", "\\^", "\\_", "\\`", "\\{")

strings <- c("jack0_d", "ab_1")

strings %>%
  str_replace_all(str_c(n, collapse = "|"), "N") %>% 
  str_replace_all(str_c(v, collapse = "|"), "V") %>% 
  str_replace_all(str_c(c, collapse = "|"), "C") %>%
  str_replace_all(str_c(s, collapse = "|"), "S")
#> [1] "CVCCNSC" "VCSN"

reprex package(v0.3.0)于2019-07-16创建