2017-05-30 83 views
0

我有一個包含HTML類似的字符串:查找字符串所有出現包含HTML

s <- "...<span class=\"pull-right\">170 cm</span>... 
<span class=\"pull-right\">29</span>... 
<span class=\"pull-right\">06/24/1987</span>..." 

其中...意味着在它們之間有其它的HTML標籤。我想提取></span>之間的信息可以是

  • 只有數字
  • 數字和字符(大寫或小寫或兩者)的形式的
  • 日期mm/dd/yyyy

我想出了像這樣的正則表達式:

">[0-9/]*[a-z ]*[A-Z]*</span>" 

這是正確的嗎?我如何提取感興趣的值?也就是說,給定s

170 cm 
29 
06/24/1987 
+1

你爲什麼不使用XML工具來提取XML(HTML)標記的數據? – hrbrmstr

+1

你有什麼研究w/r/t的HTML刮,然後呢?這感覺很像「爲我免費寫這段代碼」。 – hrbrmstr

+0

@ 989看一下BeautifulSoup4的更高層次的方法。它也與'請求'很好。 –

回答

1

你最好一個正則表達式去一個HTML解析器。但是,如果你需要一個快速和骯髒的基於正則表達式的解決方案,使用lookarounds(對於前>(?<=>))和關閉提取一些口之間的模式((?=</span>)用於尾隨</span>)模式:

(?<=>)[0-9/A-Za-z ]*(?=</span>) 

請注意0-9/a-z,A-Z被合併到一個類中,否則像​​這樣的字符串將不匹配(您的原始正則表達式要求大寫字母按照小寫字母)。

的lookarounds可與perl=TRUE

m <- gregexpr("(?<=>)[0-9A-Za-z /]*(?=</span>)", s, perl=TRUE) 
regmatches(s, m) 

演示:https://ideone.com/yvXIuP

0

這裏是匹配

170釐米

1987年6月24日

(\d{2}\/\d{2}\/\d{4})|(\d+ [A-Za-z]+)|(\d+) 
相關問題