在R中解析GS1条码字符串:拆分列括号残留及优化方法问询
在R中拆分GS1条码字符串并移除应用标识符(AI)及括号
构造示例数据
首先创建包含GS1条码的示例数据框,模拟实际场景:
library(tidyverse) df <- tibble( gs1_code = c( "(01)01234567890123(17)251231(10)ABC123", "(01)98765432109876(17)240630(10)XYZ789" ) )
方法一:使用separate_wider_regex(推荐,tidyr 1.2.0+)
该函数可通过正则模式直接匹配并拆分目标字段,同时忽略不需要的AI标识及括号:
df_processed <- df %>% separate_wider_regex( gs1_code, patterns = c( ignore = "\\(01\\)", # 忽略首个AI(01)及括号 gtin = "\\d{14}", # 提取14位GTIN编号 ignore = "\\(17\\)", # 忽略AI(17)及括号 expiry_date = "\\d{6}", # 提取6位有效期(格式:YYMMDD) ignore = "\\(10\\)", # 忽略AI(10)及括号 batch_number = ".+" # 提取剩余的批号内容 ) )
方法二:使用str_extract逐个提取字段
通过正则正向预查匹配AI标识后的目标内容,灵活处理不同结构的条码:
df_processed <- df %>% mutate( # 提取(01)后的14位GTIN gtin = str_extract(gs1_code, "(?<=\\(01\\))\\d{14}"), # 提取(17)后的6位有效期 expiry_date = str_extract(gs1_code, "(?<=\\(17\\))\\d{6}"), # 提取(10)后的所有批号内容 batch_number = str_extract(gs1_code, "(?<=\\(10\\)).+") ) %>% select(-gs1_code) # 可选:移除原始条码列
处理异常场景
若部分条码缺失某类AI标识,上述方法会返回NA,可通过replace_na补充默认值:
df_processed <- df_processed %>% replace_na(list(expiry_date = "无", batch_number = "无"))
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

