正则表达式不在R中工作,在正则表达式101中工作
以下是正则表达式,给出了正则表达式101中的预期输出: 下面是R中失败的正则表达式:正则表达式不在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:/
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
)。