r - 使用正则表达式提取名称和数字
问题描述
我想我在理解 R 中的正则表达式时可能会遇到一些问题。
我需要从样本向量中提取电话号码和姓名,并使用 stringr 包功能创建一个数据框,其中包含姓名和号码的相应列。
以下是我的样本向量。
phones <- c("Ann 077-789663", "Johnathan 99656565",
"Maria2 099-65-6569 office")
我想出的提取这些的代码如下
numbers <- str_remove_all(phones, pattern = "[^0-9]")
numbers <- str_remove_all(numbers, pattern = "[a-zA-Z]")
numbers <- trimws(numbers)
names <- str_remove_all(phones, pattern = "[A-Za-z]+", simplify = T)
phones_data <- data.frame("Name" = names, "Phone" = numbers)
它不起作用,因为它需要名称中的数字并与电话号码结合。(也不是最佳代码)
在解释完成此任务的最简单方法时,我将不胜感激。
解决方案
不是正则表达式专家,但是使用stringr
包我们可以提取带有可选“-”的数字模式,并将“-”替换为空字符串以提取没有任何“-”的数字。对于名称,我们提取字符串开头的第一个单词。
library(stringr)
data.frame(Name = str_extract(phones, "^[A-Za-z]+"),
Number = gsub("-","",str_extract(phones, "[0-9]+[-]?[0-9]+[-]?[0-9]+")))
# Name Number
#1 Ann 077789663
#2 Johnathan 99656565
#3 Maria 099656569
如果你想完全坚持stringr
我们可以使用str_replace_all
而不是gsub
data.frame(Name = str_extract(phones, "[A-Za-z]+"),
Number=str_replace_all(str_extract(phones, "[0-9]+[-]?[0-9]+[-]?[0-9]+"), "-",""))
# Name Number
#1 Ann 077789663
#2 Johnathan 99656565
#3 Maria 099656569
推荐阅读
- jestjs - 在 Jest 中有条件地运行测试
- node.js - zlib:zlib 绑定关闭
- flutter - 当我在 GitHub 上推送项目时,iOS 文件夹在颤振存储库中显示为空
- python - Matplotlib:如何使用“插入轴”将 line2D 对象复制到缩放区域
- python - 如何对图像进行去噪
- javascript - 如何在reactjs中将功能和按钮绑定在一起
- jquery - 选中复选框时如何更改表格行内输入文本的背景颜色
- java - 无法在 appium 的 twitter LoginPage 上找到元素
- ajax - 如何在特定页面上为用户添加权限
- xamarin - 适用于 iOS 的 Xamarin 表单“无法 AOT 程序集”