【问题标题】:Separate string with keeping separator用保留分隔符分隔字符串
【发布时间】:2025-12-31 07:30:12
【问题描述】:

我有一个数据农场:

ID    Value
1    message "some text"
2    more messages "some more text"

我以这种方式分隔数据框中的一列:

df <- df  %>%
  separate(Value, c("message", "text"), ' "', remove = TRUE) 

但我明白了:

ID    message             text
1    message          some text"
2    more messages    some more text"

而不是这个:

ID    message             text
1    message          "some text"
2    more messages    "some more text"

我怎样才能保留那个分隔符?我也试过这个,但犯了同样的错误:

df %>% 
  tidyr::extract(col = "Value",
                 into = c("message", "text"),
                 regex = '^(.*?) "(.*?)$', remove = FALSE)

【问题讨论】:

  • 试试'\\s+(?=")'separate'^([^"]*)\\s(".*)'extract
  • 重新打开,因为Split a column into 2 in R 没有处理当前问题,它只是帮助处理 OP 已经使用的代码。

标签: r regex dataframe


【解决方案1】:

你可以使用

separate(Value, c("message", "text"), '\\s+(?=")', remove = TRUE) 

请参阅regex demo

\s+(?=") 模式匹配 1 个或多个紧跟 " 字符的空格。

或者,使用extract,您可以使用

tidyr::extract(col = "Value",
                 into = c("message", "text"),
                 regex = '^([^"]*)\\s(".*)', remove = FALSE)

请参阅regex demo。正则表达式的意思是:

  • ^ - 字符串开头
  • ([^"]*) - 第 1 组 (message):除 " 之外的任何零个或多个字符
  • \s - 一个空格
  • (".*) - 第 2 组 (text):",然后是尽可能多的除换行符以外的任何零个或多个字符

【讨论】: