正则表达式不在R中工作,在正则表达式101中工作

正则表达式不在R中工作,在正则表达式101中工作,r,regex,R,Regex,以下是正则表达式,给出了正则表达式101中的预期输出: 下面是R中失败的正则表达式: str=“\n次级代谢产物的生物合成-其他抗生素()\n\n acpP;酰基载体蛋白\n\n” 打印(str) #>[1]“\n次级代谢产物的生物合成-其他抗生素()\n\n acpP;酰基载体蛋白\n\n” grep('\/a>(.*)\((v0.3.0) 我想要的是文本:“次级代谢产物的生物合成-其他抗生素” 编辑: 用于获取所讨论字符串的代码: >scraped=read\u html('https:/

以下是正则表达式,给出了正则表达式101中的预期输出:

下面是R中失败的正则表达式:

str=“
  • \n次级代谢产物的生物合成-其他抗生素()\n\n acpP;酰基载体蛋白\n\n
  • ” 打印(str) #>[1]“
  • \n次级代谢产物的生物合成-其他抗生素()\n\n acpP;酰基载体蛋白\n\n
  • ” grep('\/a>(.*)\((v0.3.0)

    我想要的是文本:“次级代谢产物的生物合成-其他抗生素”

    编辑: 用于获取所讨论字符串的代码:

    >scraped=read\u html('https://www.genome.jp/kegg-bin/search_pathway_object?org_name=ko&;未分类=K02078')
    >已将%>%html_节点('.box2')%%>%html_节点('li')%%>%.[1]]%%>%as.character()
    [1] “
  • \n次级代谢产物的生物合成-其他抗生素()\n\n acpP;酰基载体蛋白\n\n
  • 编辑2
    感谢您的帮助。我在此使用了此项:

    您应该使用
    sub
    而不是
    grep
    grep
    返回匹配项的索引)要提取字符串,请不要使用
    perl
    参数。我还修改了正则表达式,用所需的子字符串替换整个字符串,并使用
    s
    而不是
    str
    作为变量名,因为
    str
    是函数名


    sub(“.*?/a>(.*?\”)(正如@MrFlick所说,如果您正在解析HTML,最好使用
    rvest

    在本例中,您可以使用
    regexec
    函数以及
    regmatches
    来获取所有捕获组:

    regmatches(str, regexec('\\/a>(.*)\\(<a', str))
    [[1]]
    [1] "/a> Biosynthesis of secondary metabolites - other antibiotics (<a"
    [2] " Biosynthesis of secondary metabolites - other antibiotics " 
    

    regmatches(str,regexec('\/a>(.*)\\)(使用正则表达式解析HTML数据通常是一个糟糕的主意。你可以使用一个很好的HTML解析器包,比如
    rvest
    ,来更容易地获取数据。另外,为什么在其中有
    '\\1'
    部分?如果你使用
    grep(\\/a>(.*))\\(@MrFlick--如果这个网页是以合理的方式编码的话,那是完全正确的。我实际上使用的是
    rvest
    ,我能做的就是将字符串捕获为
    html\u text
    :(@MrFlick--是的。我很确定我把它们混在一起了。哇!我不知道有什么区别。也许
    sub
    更像
    sed
    )。