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

如何使用正则表达式提取R字符串中特定标识后的括号内数值?

提取字符串中指定键对应的数值

单键提取方案

针对你的需求,可使用正向预查精准匹配目标键后的数值,正则核心是锁定键名[与]之间的数字:

library(stringr)
x <- "series120_count[1]; crossing_success[2]; tag_comments[small]"

# 提取series120_count的数值
str_extract(x, "(?<=series120_count\\[)\\d+(?=\\])")
# 输出:"1"

# 替换前缀即可提取crossing_success的数值
str_extract(x, "(?<=crossing_success\\[)\\d+(?=\\])")
# 输出:"2"

原正则失效原因

你之前用的(?<=series120_count)(.+)(?=\\; )采用了贪婪匹配的.+,会从series120_count后一直匹配到最后一个符合; 前置条件的位置,结果会包含[1]; crossing_success[2]这类多余内容,无法精准定位单个键的数值。

通用提取函数

如果需要频繁提取不同键的数值,可以封装成函数简化操作:

extract_numeric_value <- function(target_str, key_name) {
  pattern <- paste0("(?<=", key_name, "\\[)\\d+(?=\\])")
  str_extract(target_str, pattern)
}

# 调用示例
extract_numeric_value(x, "series120_count") # 返回"1"
extract_numeric_value(x, "crossing_success") # 返回"2"

批量提取所有键值对

如果需要一次性提取所有键和对应值(包括非数值类型),可以用str_match_all批量匹配:

all_matches <- str_match_all(x, "([^\\s\\[]+)\\[([^\\]]+)\\]")[[1]]
key_value_table <- data.frame(
  键名 = all_matches[, 2],
  值 = all_matches[, 3],
  stringsAsFactors = FALSE
)

# 输出结果:
#             键名    值
# 1 series120_count    1
# 2 crossing_success    2
# 3    tag_comments small

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:20