2012-02-28 86 views
-1

如何使用正則表達式來查找除具有特定樣式的div內的數據以外的所有內容?例如使用正則表達式從HTML解析出內容?

<div style="float:left;padding-left:10px; padding-right:10px"> 
    <img src="../Style/BreadCrumbs/Divider.png"> 
</div> 
<div style="float:left; padding-top:5px;"> 
    Data to keep 
</div> 
<div style="float:left;padding-left:10px; padding-right:10px"> 
    <img src="../Style/BreadCrumbs/Divider.png"> 
</div> 

我想要正則表達式來匹配除數據以外的所有內容。我可以看到的最好的方法是刪除html標記,然後將這些文件與vb結合起來(我已經有vb代碼)

我使用的是正則表達式,因爲我需要從幾百個文件中提取數據。

+3

http://stackoverflow.com/questions/1732348/regex-match-open -tags-except-xhtml-self-contained-tags/1732454#1732454 – Mat 2012-02-28 11:18:32

+1

爲什麼你認爲正則表達式是正確的工具? – Oded 2012-02-28 11:19:42

+2

提供一些html解析。並忽略所有你會聽到關於不使用正則表達式解析html的廢話,它在簡單的情況下是完全適用的;) – demorge 2012-02-28 11:20:22

回答

1

您的建議方法可能不是一個很好的方法來做到這一點。如果:

  • 你有機會獲得grep
  • 您的grep版本支持Perl兼容的正則表達式(PCRE
  • 這種風格的div只是包裝你的數據,而不是其他元素
  • 的「數據」 div不包含其他div小號

然後你可以使用:

(?s)<div style="float:left; padding-top:5px;">.*?</div> 

這樣做的重要的部分是:

  • (?s)激活DOTALL,這意味着.將匹配換行符
  • .*?該div的內容匹配勉強,這意味着它會停止在它發現的第一個</div>

要使用此,你需要激活幾個grep的選擇:

grep -Pzo $PATTERN file 

對於這些:

  • -P激活PCRE
  • -z通過NUL取代\n所以grep會將整個文件視爲單行
  • -o僅打印匹配部分

之後,您需要剝離div。 sed是一個很好的工具。

sed 's|</\?div[^>]*>||g' 

如果你把所有的文件在一個目錄中,你可以做在同一時間加盟:

grep -Pzo $PATTERN *.html | sed 's|</\?div[^>]*>||g' > out.html 
+2

完美。不能謝謝你。 – sasdev 2012-02-28 18:55:31

+0

@sas歡迎來到SO!在此表示感謝的常用方法是對投票答案進行投票,並通過單擊複選標記來接受(如果這是最佳答案)。 – Rob 2012-02-28 20:28:10