regex - 部分字符串与新列中的匹配正则表达式匹配 - R

标签 regex r grepl

我正在尝试将数据集中的列内容与正则表达式字符串部分匹配。然后,我希望匹配行在新列中返回特定的匹配正则表达式。我的实际数据集很大(130 万行),有 300 个正则表达式,因此找到一种自动化的方法非常重要,这样添加新的正则表达式就不需要代码调整。

演示:

try.dat<-data.frame(c(1:10),c("hello","goodbye","tidings","partly","totally"))
names(try.dat)[1]<-"num"
names(try.dat)[2]<-"words"
try.dat

在这种情况下,如果一个正则表达式是“ly”,我希望在匹配行(部分、完全)中有一列包含“ly”,并在其他行中包含一些“不匹配”术语。我已经成功地使用 grepl ( subset not based on exact match ) 对数据进行了子集化,效果非常好,但这是我真正在努力解决的下一步!

我在尝试此方面取得了一些进展,主要基于此代码建议( partial string matching R ),我已对其进行了调整:

pattern<-c("ll|ood")
matching<-c("ood","ll")
regexes<-data.frame(pattern,matching)
output_vector<-character(nrow(try.dat))
for(i in seq_along(regexes)){
output_vector[grepl(x=try.dat$words,pattern=regexes[[i]][1])] <- regexes    [[i]][2]    
}
try.dat$match<- output_vector
try.dat

正如您所看到的,这会在匹配的行旁边返回一个“1” - 到达那里,但我已经没有想法了!我想知道是否有人可以指点?

谢谢!

最佳答案

我认为这样可以吗?

library(stringr)
try.dat$match = str_extract(try.dat$words, "ll|ood")
try.dat
#    num   words match
# 1    1   hello    ll
# 2    2 goodbye   ood
# 3    3 tidings  <NA>
# 4    4  partly  <NA>
# 5    5 totally    ll
# 6    6   hello    ll
# 7    7 goodbye   ood
# 8    8 tidings  <NA>
# 9    9  partly  <NA>
# 10  10 totally    ll

默认行为是提取第一个匹配项。如果您想获取所有匹配项,可以使用 str_extract_all,但在这种情况下,您需要一个非 data.frame 设置来处理不同数量的匹配项。

关于regex - 部分字符串与新列中的匹配正则表达式匹配 - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980677/

相关文章:

ios - 优化 iOS 的 SQLite 多个 LIKE 搜索

Python RE - 用于匹配带有转义引号的类 printf 格式字符串的正则表达式

r - GraphViz:未使用新安装程序设置Windows PATH,从R调用时出现问题

r - bnlearn如何计算连续数据的BIC?

删除 R 中包含一定比例大写字母的行

node.js - Joi - 无效的正则表达式

javascript - Jquery .replace 使浏览器崩溃

r - 使用自然样条拟合进行预测

r - 是否可以在 grepl() 中使用 AND 运算符?

regex - 如何设置正则表达式以在 R 中使用 grep 或 dplyr 查找变量?