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

R语言字符串处理:提取P前缀编码并复制到对应分组括号前

R语言字符串处理:补全P编码对应区间前缀

需求说明

输入字符串:

input_string <- "P24928 [1909-1922]; [1923-1936]; P08775 [1909-1922]; [1923-1936]"

需要提取所有P#####格式的编码,将每个编码补到其对应的第二个方括号区间前方,最终得到目标字符串:

"P24928 [1909-1922]; P24928 [1923-1936]; P08775 [1909-1922]; P08775 [1923-1936]"

实现方案

通过正则表达式的捕获组功能可快速完成替换,以下提供两种实现方式:

方式一:使用stringr包(推荐,语法更直观)

# 若未安装stringr包,先执行:install.packages("stringr")
library(stringr)

input_string <- "P24928 [1909-1922]; [1923-1936]; P08775 [1909-1922]; [1923-1936]"

# 正则捕获组替换
output_string <- str_replace_all(input_string, "(P\\d{5}) (\\[.*?\\]); (\\[.*?\\])", "\\1 \\2; \\1 \\3")

# 输出结果
print(output_string)

方式二:使用基础R的gsub函数

input_string <- "P24928 [1909-1922]; [1923-1936]; P08775 [1909-1922]; [1923-1936]"

# 启用Perl正则语法支持非贪婪匹配
output_string <- gsub("(P\\d{5}) (\\[.*?\\]); (\\[.*?\\])", "\\1 \\2; \\1 \\3", input_string, perl = TRUE)

# 输出结果
print(output_string)

正则逻辑说明

  • (P\\d{5}):捕获第一个分组,匹配P开头加5位数字的编码格式
  • (\\[.*?\\]):捕获第二个分组,匹配第一个带区间的方括号内容(.*?为非贪婪匹配,避免跨区间匹配)
  • ; :匹配分隔用的分号加空格
  • (\\[.*?\\]):捕获第三个分组,匹配未带编码的第二个区间方括号内容
  • 替换模板\\1 \\2; \\1 \\3:将第三个分组前补上第一个分组捕获到的P编码,实现对应区间的编码补全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:33:40