【问题标题】:Remove phone country code using Regex in R使用 R 中的正则表达式删除电话国家/地区代码
【发布时间】:2020-07-22 07:18:26
【问题描述】:

我正在尝试清理 df 中的一列电话号码。

我想删除电话号码开头的国家代码 (254)。有时会重复此国家代码 (254254),有时电话号码本身会被截断 (2540)。我不想删除数字本身中出现的任何 254 实例。我尝试了一系列解决方案,包括

name <- c('James','Peter','Jolie', 'Freddy')
phoneNumber <- c("254703162522", "254254342544942", "2540", "728124572")
df <- data.frame(name, phoneNumber)

df$phoneNumber <- df$phoneNumber %>% str_replace_all('/254{1,2}/', '')

df2 <- df %>% 
  mutate_all(funs(str_replace(., '/254{1,2}/', '')))

但我所做的似乎并没有真正改变价值观。任何指针将不胜感激。

【问题讨论】:

  • 你不需要 JS 风格的 /regexdelimiters/ 和 R 中的斜线。
  • 另外,您可以使用gsub("\\G254", "", ., perl=TRUE)

标签: r regex string replace


【解决方案1】:

这是否满足您的需求?

df %>% 
  mutate(phoneNumber_new = str_remove_all(phoneNumber, '^(254)+'))

解释:^ 表示字符串的开头,+ 重复前面的字符串。

【讨论】:

  • 是的!你能解释一下为什么我的不工作
  • 我不太确定你试图用斜线实现什么,tbh。卷曲还可以,但加号更通用。但是,如果您只想在字符串出现一次或两次时将其删除,则可以更明确。 This 是我关于 R 中正则表达式的首选网站
  • 这实际上会改变一个以 e.g. 开头的数字。 22200000,因为你的括号。您需要括号进行分组。
  • "^(254){1,2}" 是我要使用的模式,"^(254)+" 如果我们确定永远不会保留 254 个模式(如三重复制)
  • 确实!,我的错。谢谢布赖恩。我调整答案
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多