You need to enable JavaScript to run this app. R语言数据框中使用正则提取含HSPs条目的物种名与scaffold名称
优惠活动
大模型
产品
解决方案
定价
更多

R语言数据框中使用正则提取含HSPs条目的物种名与scaffold名称

R语言正则提取Names列HSPs位点信息实现方案

核心实现逻辑

  • 无需提前拆分Names列中逗号分隔的多段位点,通过正则直接锚定HSPs标记位置,一次捕获两个目标字段。
  • 正则匹配时自动兼容三种位点边界:字符串最开头、逗号分隔的中间位置、字符串最末尾,同时自动排除方括号、分隔逗号等无关注扰字符。

匹配正则拆解

完整匹配正则为:(?:^\\[?|,)([^,\\]]+?)-HSPs.*?__([^,\\]]+)
各部分作用:

  • (?:^\\[?|,):非捕获组,定位位点的起始边界,匹配字符串开头(带可选的左方括号)或者逗号分隔符,不占用捕获位。
  • ([^,\\]]+?):捕获组1,非贪婪匹配到-HSPs之前的所有字符,排除逗号、右方括号,拿到-HSPs前面的原始序列文本。
  • -HSPs:固定锚定目标标记的位置,作为序列和后续文本的分割点。
  • .*?:非贪婪匹配HSPs标记到双下划线之间的链方向文本。
  • __:定位物种名的起始边界。
  • ([^,\\]]+):捕获组2,匹配双下划线之后、到逗号或右方括号之前的所有字符,拿到原始物种名。

可运行完整代码

library(dplyr)
library(stringr)

# 载入原始测试数据
df <- structure(list(Names = structure(c(1L, 3L, 4L, 2L), .Label = c(
  "[NW_019417116.1_3-HSPs_-__Canis_glabripennis]",
  "[scaffold_27087_+__Falis_catus,scaffold_77874_2-HSPs_-__Ratus_griseus]",
  "[scaffold_29690_2-HSPs_-__Lopus_eremicus,scaffold_3037_+__Pig_sd,scaffold_144501_556-844_+__Lopus_eremicus]",
  "[UDEW01029642.1_1-357_+__Falis_catus,scaffold_100683_331-631_+__Pig_sud,scaffold_209026_2-HSPs_+__Pig_sud,scaffold_220973_58-331_+__Pig_sud]"
), class = "factor")), class = "data.frame", row.names = c(NA, -4L))

# 提取生成结果数据框
result_df <- df %>%
  mutate(
    # 一次正则匹配拿到两个捕获值
    match_res = str_match(Names, "(?:^\\[?|,)([^,\\]]+?)-HSPs.*?__([^,\\]]+)"),
    # 处理scaffold名:去掉序列结尾的_数字坐标位
    Scaffold_name = str_remove(match_res[, 2], "_\\d+$"),
    # 直接取双下划线后的物种名
    Specie_name = match_res[, 3]
  ) %>%
  # 删除临时匹配列,保留目标列顺序
  select(Names, Specie_name, Scaffold_name)

原代码问题说明

  • 原代码匹配scaffold时强制要求位点前面有逗号,导致字符串开头的单位点(如第一行只有一个HSPs片段的场景)无法匹配到结果。
  • 原代码提取物种名时用多段gsub逐次清洗逗号、方括号,容易误删其他位置的有效文本,且匹配规则没有锚定双下划线位置,提取结果不稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 07:06:05