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

如何用正则匹配每两个数字后的逗号,结合dplyr拆分列生成对应行?

解决方案

问题原因

你之前的separate_rows参数sep匹配了完整的数字组,separate_rows会删除所有匹配到的分隔符内容,因此数字部分被直接删除,只留下空值或逗号。

实现方法

这里提供两种可直接运行的实现方案:

方案1:正则环视匹配分隔符(直接用separate_rows)

通过正向逆序环视,只匹配两组数字之间的逗号作为分隔符,不涉及数字本身的匹配:

library(dplyr)
library(tidyr)

df_example <- tibble(Lotes= "LOT1,LOT2,LOT3",NoModuloPlastico = "71,72,80,81,102,100")

df_result_example <- df_example %>%
  separate_rows(Lotes, sep = ",") %>%
  # perl=TRUE启用PCRE正则支持环视语法
  separate_rows(NoModuloPlastico, sep = "(?<=\\d{1,4},\\d{1,4}),", perl = TRUE)

方案2:先拆分再合并(适配任意长度数字、任意组数场景)

先把两个字段都拆分为列表,再对数字列两两合并,最后同步展开,逻辑更通用:

library(dplyr)
library(tidyr)
library(stringr)

df_example <- tibble(Lotes= "LOT1,LOT2,LOT3",NoModuloPlastico = "71,72,80,81,102,100")

df_result_example <- df_example %>%
  mutate(
    Lotes = strsplit(Lotes, ","),
    NoModuloPlastico = strsplit(NoModuloPlastico, ",") %>% 
      lapply(function(num_vec) {
        paste(num_vec[c(TRUE, FALSE)], num_vec[c(FALSE, TRUE)], sep = ",")
      })
  ) %>%
  unnest(c(Lotes, NoModuloPlastico))

运行结果

两种方案最终输出结果一致:

LotesNoModuloPlastico
LOT171,72
LOT280,81
LOT3102,100

内容的提问来源于stack exchange,提问作者Andres Hidalgo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:57:03