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

R语言dplyr中用str_match提取(与=间字符串的问题

解决dplyr中用str_match提取指定化学名称的问题

我来帮你搞定这个正则提取的小麻烦!你之前得到多余内容的原因是正则没精准定位到要提取的部分,下面给你两种可行的解决方案:

方法一:使用str_match捕获目标组

str_match会返回包含匹配结果和捕获组的矩阵,我们可以通过捕获组来精准提取括号和等号之间的化学名称:

# 先加载必要的包
library(dplyr)
library(stringr)

# 替换your_column_name为你实际的列名
ru2 <- ru2 %>%
  mutate(chemical_name = str_match(your_column_name, "\\(([^=]+)\\s=")[, 2])

正则解释:

  • \\(:匹配字符串中的左括号((需要转义)
  • ([^=]+):捕获一个或多个非等号的字符,也就是我们要的BETA-CYFLUTHRIN
  • \\s=:匹配后面的空格加等号,确保我们只提取到等号前的内容
  • [,2]:取矩阵的第二列,也就是捕获到的目标内容

方法二:使用str_extract结合环视(更简洁)

如果不想处理矩阵,用str_extract配合正则环视可以直接提取目标内容:

ru2 <- ru2 %>%
  mutate(chemical_name = str_extract(your_column_name, "(?<=\\())\\S+(?=\\s=)"))

正则解释:

  • (?<=\\()):反向预查,确保提取内容的前面是左括号(
  • \\S+:匹配一个或多个非空白字符(完美适配你的化学名称格式)
  • (?=\\s=):正向预查,确保提取内容的后面是空格加等号

测试验证

你可以用测试字符串验证效果:

test_str <- "Chemical: (BETA-CYFLUTHRIN = 118831)"
str_match(test_str, "\\(([^=]+)\\s=")[,2]
# 输出:"BETA-CYFLUTHRIN"

str_extract(test_str, "(?<=\\())\\S+(?=\\s=)")
# 输出:"BETA-CYFLUTHRIN"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:35:25