查找模式并提取字符串

时间:2016-04-29 10:24:11

标签: regex r

我正在尝试废弃一个网站我是一个使用正则表达式的新手。我有一个很长的字符向量,这是我瞄准的行:

<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)

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用stringr

> library(stringr)
> str_extract(x, "(?<=<span id=\"hitCount.top\">)(.*?)(?=</span>)")
[1] "10,079"

使用gsubsub也可以在这里使用,而不是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>