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

在R中基于多规则拆分无简单分隔符的字符串

解决方案

可以用tidyverse里的stringr和tidyr工具组合实现,步骤如下:

假设你的原始数据是一个单列的data.frame/tibble,列名为raw_data,先模拟示例数据:

library(tidyverse)

# 模拟原始单列数据
df <- tibble(raw_data = "Jacoby BrissettO 206.5-115U 206.5-115Joe BurrowO 243.5-115U 243.5-155")

步骤1:拆分每个球员的独立信息块

利用球员名字首字母大写的规律,用正则正向预查定位分割点,把长字符串拆成单个球员的信息片段:

df_split <- df %>%
  mutate(player_blocks = str_split(raw_data, "(?=[A-Z][a-z]+)")) %>%
  unnest(player_blocks)

这里的正则(?=[A-Z][a-z]+)是正向预查,匹配"后面跟着大写字母+小写字母"的位置——刚好对应新球员名字的开头,以此分割出每个球员的完整信息块。

步骤2:提取名字和O/U线数值

对每个球员块,分别提取目标字段:

result <- df_split %>%
  # 提取名字:匹配到"O"之前的所有内容
  mutate(Name = str_extract(player_blocks, "^.*?(?=O)"),
         # 提取O线数值:匹配"O "后面的浮点数
         `O/U Line` = str_extract(player_blocks, "(?<=O )\\d+\\.\\d")) %>%
  # 过滤空行(防止分割出无效片段)
  filter(!is.na(Name) & !is.na(`O/U Line`)) %>%
  select(Name, `O/U Line`)

运行后得到的result就是你需要的表格:

NameO/U Line
Jacoby Brissett206.5
Joe Burrow243.5

关键正则说明

  • ^.*?(?=O):从字符串开头匹配,直到遇到"O"为止(不包含O),非贪婪模式避免匹配过多内容。
  • (?<=O )\\d+\\.\\d:正向后顾匹配"O ",提取后面的浮点数,确保取的是O对应的数值而非U的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:57:14