You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:35:40