用regmatches保留不匹配的字符串(R)

时间:2016-06-19 22:52:47

标签: regex r excel expression

背景问题:

目前我们有一个项目描述列表(1278 obs),其中一些包含产品代码。例如," REF VLOC0004 V LOC 3/0 15CM SUTURE DEVICE"),代码为VLOC0004。

我将其存储为excel文件,我希望说明栏旁边有一列,每个说明旁边都填写了商品代码。

目前完成的工作:

我已经设法将数据加载到R中并且能够为正则表达式编写自己的模式(如果我觉得我不能完成拾取一些代码串的任务,我可能会复活它)。 E.g R代码如下。

# Pattern
p=("([A-Z]*[0-9]{4,}[A-Z]*)|([0-9]+[:punct:][0-9]+)|([0-9]+[:punct:][0-9]+[:punct:][0-9]+)")
# Match data from regexpr()
m<-regexpr(p,EGIA$LGY_DHB_ITEM_DESCRIPTION)

问题:

当我运行regmatches来提取上面的模式时,它只提取找到的匹配并忽略其中没有代码的描述。结果是它创建了一个长度仅为608的向量。如果我在项目描述旁边使用此列,则代码不会与说明对齐。我需要的是这个向量以某种方式给出了一个空白点,其中找不到项目代码,因此该提取向量与项目描述的长度相同。

我使用逆命令玩了但是它没有用。任何有关这方面的帮助将不胜感激,我已经浏览了许多关于正则表达式和本网站的教程,但我对信息感到不知所措,其中没有一个似乎相关。

1 个答案:

答案 0 :(得分:0)

可以对str_detect + ifelse进行简单组合。当然还有很多其他方法可以做到这一点。

library(stringr)
str <- c("ab", "bc", "cd")
yes <- str_detect(str, "c")
ifelse(yes==T, "c", NA)
#NA  "c" "c"