首页 > 解决方案 > 是否可以在 R 中为正则表达式子字符串提供一组选项?

问题描述

我有一个数据框,其中包含一些带有错误消息的单元格作为字符串。字符串有以下形式:

ERROR-100_Data not found for ID "xxx"
ERROR-100_Data not found for id "xxx"
ERROR-101_Data not found for SUBID "yyy"
Data not found for ID "xxx"
Data not found for id "xxx"

我需要提取错误的编号(如果有的话)和 GENERAL 描述,避免 ID 或 SUBID 的特殊性。我有一个使用以下正则表达式的函数:

sub(".*?ERROR-(.*?)for ID.*","\\1",df[,col1],sep="-")

这仅适用于第一种情况。有没有办法只使用一个表达式来获得以下结果?

100_Data not found
100_Data not found
101_Data not found
Data not found
Data not found

标签: rregexsubstring

解决方案


我们可以用:

tsxt <- 'ERROR-100_Data not found for ID "xxx"'
    gsub("\\sfor.*|ERROR-","",tsxt, perl=TRUE)
   [1] "101_Data not found"

或如@Jan 锚所建议的那样ERROR使其更通用:

gsub("\\sfor.*|^ERROR-","",tsxt, perl=TRUE)

推荐阅读