正则表达式删除<>之间的所有内容

时间:2017-04-19 19:01:57

标签: r regex web-scraping gsub

我正在学习网络搜索。我掌握了一堆数据但结构凌乱 我有一个这种形式的字符串向量:
"9,55< U+00A0>x< U+00A0>1016",(现在当我写它时,我认为这是一种特殊的语法,因为我不能在没有在“U”之前放置空格的情况下粘贴它)  在我正在抓取的网站上写的是“9,55 * 10 ^ 16”。

我的目标是将此字符串转换为数字变量,即95500000000000000。 但首先我要删除第一个“&lt;”之间的所有内容和最后一个“&gt;”。 以下是我的尝试。

gsub("<(.*?)>", "", vectorOfStrings)

修改:最好使用"9,55\U{00A0}x\U{00A0}1016"在R中生成字符串,因为“&lt;”和“&gt;”不是字符串中的实际文字。

4 个答案:

答案 0 :(得分:5)

你看到的角色是unicode(UTF-8,我认为),R代表(当它不是很清楚的时候)是小于/大于符号。要删除它,一种方法是&#34;转换&#34; ASCII文本:

iconv(vectorOfStrings, "utf-8", "ASCII", sub = "")

任何不可翻译的内容都应该删除。

答案 1 :(得分:1)

我只会改变你的贪婪&#34;匹配所有&#34;到&#34;匹配所有&#39;&gt;&#39;喜欢,或使用。?让它变得懒惰(匹配最小)

<[^>]*> or <.*?>

或将标记与标记匹配

<.*?>.*?<.*?>

答案 2 :(得分:1)

这有效

>vectorOfStrings = "9,55< U+00A0>x< U+00A0>1016"
>vectorOfStrings1 = gsub("<[^>]+>","",vectorOfStrings)
>vectorOfStrings1 
[1] "9,55x1016"

答案 3 :(得分:0)

这是我的代码,用于将科学记数字从网络上划分为数字:

library(magrittr)

vectorOfStrings <- "9,55< U+00A0>x< U+00A0>1016"  

scrape_numeric <- function(x) {
 x %>% 
   gsub(">10", ">e+", .) %>%
   gsub("<.*>", "", .) %>%
   gsub(",", ".", .) %>%
   as.numeric
}

scrape_numeric(vectorOfStrings)

# [1] 9.55e+16