首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用带有起始和停止字的substr,而不是整数

使用带有起始和停止字的substr,而不是整数
EN

Stack Overflow用户
提问于 2019-05-23 04:45:20
回答 1查看 100关注 0票数 1

我想从下载的html-Code中提取信息。html-Code以字符串的形式给出。所需的信息被存储在特定的html表达式之间。例如,如果我想要字符串中的每个标题,我必须搜索"H1>“和"/H1>”以及这两个html表达式之间的文本。

到目前为止,我使用了substr(),但我必须首先计算"H1>“和"/H1>”的位置。

代码语言:javascript
复制
htmlcode = " some html code <H1>headline</H1> some other code <H1>headline2</H1> "
startposition = c(21,55) # calculated with gregexpr
stopposition = c(28, 63) # calculated with gregexpr
substr(htmlcode, startposition[1], stopposition[1])
substr(htmlcode, startposition[2], stopposition[2])

输出是正确的,但计算每个单独的开始和停止位置是大量的工作。相反,我搜索了一个类似的函数,比如substr (),在这个函数中,您可以使用开始和结束字来代替位置。例如:函数(htmlcode,startword = "H1>",stopword = "/H1>")

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 05:36:17

这里有两个选项。首先,使用专门为解析HTML结构而开发的包,例如rvest。有许多在线教程。

其次,对于可能需要从不一定是格式良好的HTML的字符串中提取的边缘情况,您应该使用正则表达式。其中一个更简单的实现来自于stringr::str_match

代码语言:javascript
复制
# 1. the parenthesis define regex groups
# 2. ".*?" means any character, non-greedy
# 3. so together we are matching the expression <H1>some text or characters of any length</H1>

str_match(htmlcode, "(<H1>)(.*?)(</H1>)")

这将产生一个矩阵,其中的列(按顺序)是完全匹配的字符串,后面是我们指定的每个独立的正则表达式组。在这种情况下,如果您想要<H1>标记之间的任何文本(第3列),您只需要拉出第二组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56264764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档