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

R语言如何删除数据框文本字段每条记录的最后一个段落

解决方案

问题复现

构造测试数据的代码如下:

text <- as.data.frame("Lorem ipsum dolor sit amet, consetetur \n sadipscing elitr, sed diam nonumy eirmod tempor invidunt \n ut labore et dolore magna aliquyam erat, sed diam voluptua.\nAt vero eos et accusam et justo duo dolores et ea rebum.")
colnames(text) = "Lorem"

需求是批量删除每条记录的最后一个段落,各条记录的文本长度、内容均不固定。之前尝试通过正则替换移除最后一个换行符后的内容未成功,目前已经实现反向效果(提取最后一段内容),对应代码:

text %>% mutate(Lorem = sub(".*\n","", Lorem))

运行上述代码会返回最后一段内容At vero eos et accusam et justo duo dolores et ea rebum.,但无法直接取反得到需要的结果。

正确实现代码

通过贪婪匹配捕获最后一个换行符前的所有内容即可,代码如下:

library(dplyr)
text %>%
  mutate(Lorem = sub("(.*)\n.*", "\\1", Lorem))

正则逻辑说明

  • (.*)是贪婪模式的捕获组,会自动定位到字符串中最后一个\n的位置,匹配该位置前的所有文本
  • \n.*匹配最后一个换行符以及换行符后的所有内容(也就是要删除的最后一段)
  • 替换参数\\1代表保留第一个捕获组匹配到的内容,丢弃后面匹配到的最后一段内容

针对示例数据,运行上述代码后得到的结果和预期完全一致:

Lorem ipsum dolor sit amet, consetetur
sadipscing elitr, sed diam nonumy eirmod tempor invidunt
ut labore et dolore magna aliquyam erat, sed diam voluptua.

如果需要兼容Windows系统的\r\n换行格式,把正则替换为(.*)\r?\n.*即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:51:23