R:使用正则表达式查找产品代码

时间:2016-03-10 23:20:51

标签: regex r expression gsub

所以我有一个产品项目描述列表。我把它加载到R.大多数这些描述完全是胡说八道,我们正在尝试从中提取一个不错的项目代码。

我可以在R中使用正则表达式来创建一个只有列表中的整数值的新向量,而不是逐行进行吗?

我现在有大部分代码

JJ <- read.csv2(file.choose(),header= TRUE)
JJ$X <- gsub(pattern = "[0-9]+", replacement = "", 
    x = JJ$LGY_DHB_ITEM_DESCRIPTION, ignore.case = TRUE)

但我不确定在替换论证中应该放什么。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用空字符串替换非(gsub("[^[:digit:]]*", "", 'PRIVATE CONTRACT INV 710456354') [1] "710456354" )数字(gsub("[^[:digit:]]*", "", 'PRIVATE 123 CONTRACT INV 710456354') [1] "123710456354" )字符:

JJ <- data.frame(LGY_DHB_ITEM_DESCRIPTION=c('PRIVATE CONTRACT INV 710456354', 'PRIVATE 123 CONTRACT INV 710456354'))
m <- gregexpr("[0-9]*", JJ$LGY_DHB_ITEM_DESCRIPTION)
all_m <-  regmatches(JJ$LGY_DHB_ITEM_DESCRIPTION, m)
JJ$X <- mapply(FUN =function(stri,idx) stri[idx],all_m, sapply(lapply(all_m,nchar),which.max))
JJ
            LGY_DHB_ITEM_DESCRIPTION         X
1     PRIVATE CONTRACT INV 710456354 710456354
2 PRIVATE 123 CONTRACT INV 710456354 710456354

但如果你的字符串中有多个数字,那么这不会起作用:

{{1}}

您可以尝试在每个字符串中找到最长的商业广告:

{{1}}