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
相关产品推荐
相关产品推荐

