R 正则表达式-从公式中删除poly()

R 正则表达式-从公式中删除poly(),r,regex,formula,R,Regex,Formula,我在R中有一个公式作为字符向量,我需要从这个公式中删除poly(),如果存在的话 例如,到目前为止,我的一些尝试(未成功): p[1]“挖掘+” 唯一(子(p,\\2,“,”开采+多边形(覆盖层,3)+spp”)) #>[1]“封面,3” 唯一(子(p,\\3,“,”开采+多边形(覆盖层,3)+spp”)) #> [1] "" 独特的(子(p,\\4”,“开采+多边形(覆盖层,3)+spp”)) #> [1] ")" 唯一(子(p,\\5,“,”开采+多边形(覆盖层,3)+spp”)) #>[1

我在R中有一个公式作为字符向量,我需要从这个公式中删除
poly()
,如果存在的话

例如,到目前为止,我的一些尝试(未成功):

p[1]“挖掘+”
唯一(子(p,\\2,“,”开采+多边形(覆盖层,3)+spp”))
#>[1]“封面,3”
唯一(子(p,\\3,“,”开采+多边形(覆盖层,3)+spp”))
#> [1] ""
独特的(子(p,\\4”,“开采+多边形(覆盖层,3)+spp”))
#> [1] ")"
唯一(子(p,\\5,“,”开采+多边形(覆盖层,3)+spp”))
#>[1]“+spp”
我期望的结果是:

输入:
“矿山+多边形(覆盖层,3)+spp”

输出:
“开采+覆盖+spp”

我尝试了这么多模式,但不是
poly(…,3)
没有被删除,就是
,3)
,3
保留在结果字符串中。。。感谢您的帮助!(顺便说一句,
3
是任意的,模式应该删除任何度值…

试试这个正则表达式:

poly\(([^,]*)[^)]*\)
将匹配项替换为组1内容

gsub("poly\\((.+),\\s*\\d+\\)", "\\1", inp)
# [1] "mined + cover + spp"

说明:

  • poly\(
    -匹配
    poly(
  • ([^,]*)
    -匹配任何非
    字符的0+次出现次数。这在组1中捕获
  • [^]*\)
    -匹配任何非
    字符的0+次出现次数,后跟
现在用第1组内容替换整个比赛

gsub("poly\\((.+),\\s*\\d+\\)", "\\1", inp)
# [1] "mined + cover + spp"
或者以一种更易于处理的逐步方式(因为您正在处理更复杂的正则表达式):

尝试
gsub(\\bpoly\\(\\s*(\\w+)(:\\s*,[^)]*)?\\),“\\1”,x)
。看见