R 中的掩码电话号码

2024-01-25

我的原始数据有很多个人信息,所以我在R中屏蔽它们。示例数据和我的原始代码如下:

install.packages("stringr")
library(string)

x = c("010-1234-5678",
      "John 010-8888-8888",
      "Phone: 010-1111-2222",
      "Peter 018.1111.3333",
      "Year(2007,2019,2020)",
      "Alice 01077776666")

df = data.frame(
  phoneNumber = x
)

pattern1 = "\\d{3}-\\d{4}-\\d{4}"
pattern2 = "\\d{3}.\\d{4}.\\d{4}"
pattern3 = "\\d{11}"

delPhoneList1 <- str_match_all(df, pattern1) %>% unlist
delPhoneList2 <- str_match_all(df, pattern2) %>% unlist
delPhoneList3 <- str_match_all(df, pattern3) %>% unlist

我从数据集中发现了三种类型的模式,每种结果如下:

> delPhoneList1
[1] "010-1234-5678" "010-8888-8888" "010-1111-2222"
> delPhoneList2
[1] "010-1234-5678" "010-8888-8888" "010-1111-2222" "018.1111.3333" "007,2019,2020"
> delPhoneList3
[1] "01077776666"

Pattern1 是我国典型的电话号码类型,使用破折号,但有人使用逗号输入类似 pattern2 的号码。但是,pattern2 还包含pattern1,因此它会检测其他模式,如年份系列。这是一个意想不到的结果。

我的问题是如何匹配我定义的确切模式。Pattern2 包含过多的模式,例如"007,2019,2020" from "Year(2007,2019,2020)".

此外,下一步是使用以下代码屏蔽号码:

for (phone in delPhoneList1) {
  df$phoneNumber <- gsub(phone, "010-9999-9999", df$phoneNumber)
}

我认为该代码对我来说是完美的,但如果您有更有效的方法,请告诉我。

Thanks.


一种模式可以统治一切;-)

ptn <- "\\b\\d{3}([-.]?)\\d{4}\\1\\d{4}\\b"
grepl(ptn, x)
# [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
  • 原因是你的pattern2失败是因为它使用了.作为分隔符,但在正则表达式中表示“任何字符”。你可以用\\.代替.它会表现得更好。

  • 我在这里使用占位符:如果第一个分隔符是-, then \\1确保其他分隔符相同。如果它是空的,那么第二个也是空的。这也使得11个不间断的号码pattern3.

  • The \\b是字边界,向我们保证 12 位数字会not match:

    grepl(ptn, c("12345678901", "123456789012"))
    # [1]  TRUE FALSE
    

由于它有一个占位符,因此它往往会有点混乱stringr::功能,但我们可以根据您的需要解决这个问题。

例如,如果您将占位符替换为相同模式的第二个实例,则可能允许123-4444.5555(混合分隔符),如果这不是问题的话。

ptn2 <- "\\b\\d{3}[-.]?\\d{4}[-.]?\\d{4}\\b"
unlist(str_match_all(x, ptn2))
# [1] "010-1234-5678" "010-8888-8888" "010-1111-2222" "018.1111.3333" "01077776666"  

或者我们可以利用匹配模式的数量(原始ptn):

unlist(str_match(x, ptn)[,1])
# [1] "010-1234-5678" "010-8888-8888" "010-1111-2222" "018.1111.3333" NA              "01077776666"  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中的掩码电话号码 的相关文章

随机推荐

  • 使用 lodash 的 isEqual() 在比较中排除一些属性

    我在用 是平等的 https lodash com docs isEqual它比较 2 个对象数组 例如 每个对象 10 个属性 并且工作正常 现在有 2 个属性 创建和删除 我不需要成为比较的一部分 Example var obj1 na
  • 如何将第一个孩子移到最后?

    我在 div 容器中有一些 div 项目 我想连续地为它们设置动画 我知道如何在无限循环中运行我的函数 但是选择第一个 div 对其进行动画处理并在完成动画后将其移动到末尾存在问题 我的函数如下所示 function MoveItems c
  • 将 XAML 行为附加到相同类型的所有控件

    我有一个InvokeCommandAction我所拥有的附加到GotFocus的事件TextBox像这样
  • Laravel 将文件上传到项目目录之外的不同存储

    我正在创建一个 CMS 其中我可以使用 Laravel 的文件上传来上传文件 照片 pdf 等 我所做的不同之处在于 我想将文件存储在 CMS 项目目录之外 比如说我网站的存储文件夹 顺便说一句 我正在创建两个不同的项目 Laravel 文
  • CFG 在 NLTK 中使用 POS 标签 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 针对特定包的自定义意图

    假设我的应用程序是 A 我使用应用程序 A 中的自定义意图启动应用程序 B 的活动 它工作得很好 正如我所希望的那样 我使用的代码是在应用程序 B 的清单中
  • 使用 printf 格式化输出:截断或填充

    我想产生以下输出 gt Avril Stewart 99 54 gt Sally Kinghorn 170 60 gt John Young 195 120 gt Yutte Schim 250 40 如您所见 短于 14 个字符的名称会用
  • 接收 zip 文件,angularJs

    当我想从 Rest api 下载 zip 文件时遇到问题 当 zip 文件从我的服务器 带有球衣 传输时 我收到的文件已损坏 我已经尝试过responseType arraybuffer 在我的 http 请求上 但它没有解决任何问题 这是
  • 类似 XPath 的嵌套 Python 字典查询

    有没有办法为嵌套 python 字典定义 XPath 类型查询 像这样的事情 foo spam eggs morefoo bar soap morebar bacon foobar print foo select morefoo more
  • “constexpr if”与“if”的优化 - 为什么需要“constexpr”?

    C 1z 将引入 constexpr if 根据条件删除一个分支的 if 看起来合理且有用 但是 没有 constexpr 关键字就不可能了吗 我认为在编译期间 编译器应该知道编译期间是否已知条件 如果是的话 即使是最基本的优化级别也应该删
  • 更改 jquery 工具提示箭头的位置

    我正在尝试将箭头的位置更改为文本框附近的左侧 我怎样才能解决这个问题 我已经尝试过这个 工作示例链接 http jsfiddle net b8fcg http jsfiddle net b8fcg HTML
  • Java EE 6 发布日期 [已关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Java
  • 用于操作 S-Record 和 Intel HEX 16 文件的库

    是否有可用的开源库 用 python 或 java 开发 用于操作 Motorola S Record 文件和 Intel HEX 16 文件 例如从一种格式转换为另一种格式 我正在寻找一个 纯 java或python库 而不仅仅是一组ja
  • RecyclerView 回收时出现问题

    我有一个我使用创建的项目列表RecyclerView 当用户单击其中之一时 我会更改所选项目的背景颜色 问题是 当我滚动浏览我的项目并回收它们时 某些项目会获得所选项目的背景颜色 这是错误的 在这里你可以看到我的Adapter s code
  • 用字典解析字符串的算法

    Given 一本充满单词的字典 in july den dentist best 使用一些 C API 来访问它 boolean findWord string word or string getNextWord void 迭代它 一些没
  • 解码 websocket 框架

    我正在尝试解码 websocket 帧 但在解码扩展有效负载时没有成功 到目前为止我所取得的成就是 char in data char buffer unsigned int i unsigned char mask 4 unsigned
  • 就地对 Perl 数组进行排序

    我有一个对数组的引用 称为 intervals 我想对这个数组中的值进行排序 数组中可能有大量值 所以我不想复制这些值 我目前的做法是这样的 sub by position a gt start lt gt b gt start a gt
  • React Hooks:如何在渲染之前等待数据被获取

    我在 useEffect 挂钩中有 fetch 方法 export const CardDetails gt const card getCardDetails useState const id useParams useEffect g
  • ResponseEntityExceptionHandler 针对 401 异常返回空响应正文

    我正在尝试使用 RestTemplate 实现对身份验证服务器的 Rest 调用 并记录响应 以防服务器返回异常 为了做到这一点 我使用 ResponseEntityExceptionHandler 来处理 HttpClientErrorE
  • R 中的掩码电话号码

    我的原始数据有很多个人信息 所以我在R中屏蔽它们 示例数据和我的原始代码如下 install packages stringr library string x c 010 1234 5678 John 010 8888 8888 Phon