我正在尝试废弃一个网站我是一个使用正则表达式的新手。我有一个很长的字符向量,这是我瞄准的行:
<h3 class=\"title4\">Results: <span id=\"hitCount.top\">10,079</span></h3>\n
我想提取<span id=\"hitCount.top\">
和</span>
之间的数字。在这种情况下10,079。到目前为止,我的方法并没有真正起作用。
x <- '<h3 class=\"title4\">Results: <span id=\"hitCount.top\">10,079</span>'
m <- gregexpr(pattern="[<span id=\"hitCount.top\">].+[</span>]", x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
regmatches(x, m)
任何帮助将不胜感激。
答案 0 :(得分:1)
使用stringr
库
> library(stringr)
> str_extract(x, "(?<=<span id=\"hitCount.top\">)(.*?)(?=</span>)")
[1] "10,079"
使用gsub
(sub
也可以在这里使用,而不是gsub
)
> gsub(".*<span id=\"hitCount.top\">(.*?)</span>.*", "\\1", x)
[1] "10,079"
答案 1 :(得分:1)
只是为了说明使用XML
包时可能会有多容易:
> library("XML")
> url = "PATH_TO_HTML"
> parsed_doc = htmlParse(file=url, useInternalNodes = TRUE)
> h3title4 <- getNodeSet(doc = parsed_doc, path = "//h3[@class='title4']")
> plain_text <- sapply(h3title4, xmlValue)
> plain_text
[1] "Results: 10,079"
> sub("\\D*", "", plain_text)
[1] "10,079"
sub("\\D*", "", plain_text)
行将删除输入中的第一个0+非数字块,即\D*
将匹配Results:
,并将其替换为空字符串。< / p>
我使用的示例HTML是
<html>
<body>
<h3 class="title4">Results: <span id="hitCount.top">10,079</span></h3>
<img width="10%" height="10%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Green-Up-Arrow.svg/2000px-Green-Up-Arrow.svg.png"/>
</body>
</html>