2016-04-28 46 views
0

我有一個html文件提取文本出來的「<' and '>」

我需要提取它,我想這迄今跨度標籤裏面的一些文字,但它似乎不工作:

HTML:

"<span id=\"MainContent_lblGenAssessment\">$866,250</span></dd>" 

我嘗試這樣做:

gsub(x = "<span id=\"MainContent_lblGenAssessment\">$866,250</span></dd>"r,pattern = ">(.*?)<",replacement = "\\1") 

但似乎沒用,我怎樣才能提取86 6,250?

編輯:它必須使用默認的R庫,我不能安裝任何軟件包。

+1

「我無法安裝任何軟件包」這是極不可能的。 – Roland

+0

關於這個問題的規範問題的強制性鏈接:[RegEx匹配除XHTML自包含標記之外的開放標記](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained標籤都有效)。 – sleske

+0

正則表達式不應該在html上使用。這樣做的正確方法是安裝一個html解析包並正確執行。我推薦'XML :: xmlValue' –

回答

5

內做到這一點的正確方法是用一個解析器來解析HTML,像這樣:

library(rvest) 
x %>% read_html() %>% html_text() 
# [1] "$866,250" 

如果你必須用正則表達式(如果是用於大量數據,或者很難檢查結果,這是一個非常糟糕的主意,例如

sub('.*>([^<]+)<.*', '\\1', x) 
# [1] "$866,250" 

如果span標籤是多了很多HTML中間,你就必須添加更多的正則表達式來指定:在程序使用),你可以用做。

正則表達式查找

  • 任何字符.重複0次或多次*
  • 隨後>
  • 隨後是捕獲組(...)
    • 含有任何字符除了[^ ... ]
      • 一個<
    • 重複一次或更多次+
  • 隨後<
  • 後跟任意字符.重複0次或多次*

並代替它與第一個被捕獲的組,\\1

+0

這個工作,請你解釋一下這個正則表達式。 – Kevin

+0

@Kevin編輯說明它匹配整行,但只捕獲'>'和'<'之間的內容,並用捕獲的內容替換整個內容。 – alistaire

2

試試這個:

([\d,]*)<\/span>

假設要提取每個數字都是<span>標籤

+0

錯誤:'\ d'是字符串中無法識別的轉義開始「」([\ d「 – Kevin

+0

@Kevin - '\\ d' in R regex。 – thelatemail

+0

@JanLeeYu這裏是結果: $ 866,250「它刪除了span標記,我不知道R爲什麼會這麼做 – Kevin