2017-04-19 159 views
2

我正在學習網絡刮。我掌握了一堆數據,但結構很雜亂。
我有這種形式的字符串矢量:
"9,55< U+00A0>x< U+00A0>1016",(現在,當我寫它,我認爲這是一個特殊的語法,因爲我不能在這裏沒有「U」之前把一個空間粘貼) 其上我所刮的網站被寫爲「9,55 * 10^16」。正則表達式刪除之間的所有內容<>

長期來看,我的目標是將此字符串轉換爲數字變量,即95500000000000000. 但首先我要刪除第一個「<」和最後一個「>」之間的所有內容。 以下是我的嘗試。

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

編輯:該字符串中的R用"9,55\U{00A0}x\U{00A0}1016"最好產生,由於「<」和「>」不是字符串中實際文字。

+0

這是什麼語言?什麼是gsub()? – MrJLP

+0

@MrJLP:這是「R」語言。 'gsub'是一個正則表達式搜索/替換函數。 – r2evans

+0

如果您使用php做preg_replace javascript做//注意的是有時他們不做< and >但<和>也許你需要做的R語言// g – DrBrad

回答

4

你看到的字符是unicode(UTF-8,我認爲)和R的表示(當它不是十分清楚時)是小於/大於表示法。要刪除它,一種方法是將文本「轉換」爲ASCII:

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

任何不可翻譯的內容都應該刪除。

+1

葉普這就是它! :D 我在想這是這樣的,因爲我不能以正確的形式在我的問題中寫出它。 SO自動將它轉換爲「正確」的結構。 謝謝! – TKN

1

我想簡單地改變你的貪婪「匹配所有」爲「匹配所有,但‘>’一樣,或使用?讓它偷懶(最低匹配)

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

或匹配的標籤標記

<.*?>.*?<.*?> 
+0

這會做,如果它只是一個普通的字符串,但在我的情況下它是不同的:(請參閱@ r2evans解決方案。 – TKN

+0

@TKN我會離開它包裝某人來這裏尋找基於問題title = P的文本版本 – Tezra

+0

聽起來不錯。這總是讚賞:D – TKN

1

這工作

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

這將做,如果它只是一個普通的字符串,但在我的情況下,它是不同的:( 請參閱@ r2evans解決方案。 – TKN

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 
相關問題