2012-03-23 60 views
0

我在R上工作,我想從PlainTextDocument中提取所有關閉 的HTML標記。 我使用GSUB法正則表達式:提取所有html標記,並用正則表達式關閉

gsub("<?!([^<]/*)>"," ",fm,perl=TRUE,ignore.case=TRUE) 

但是,斜槓「/」未評估。


我想我不是很清楚。

這是我需要做的:

我有一個文本(HTML文檔),我想只保留標籤(<></>)。我認爲使用gsub會是一個好主意,但也許你有更好的解決方案。

+0

你需要逃避'/'嗎? – Cheetah 2012-03-23 22:35:35

+0

我同意本,如果這是正在被解析爲perl正則表達式不perl使用'/'作爲分隔符? – 2012-03-23 22:37:27

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#answer-1732454 – Axeman 2012-03-23 23:01:18

回答

0

它可能需要被「轉義」:\\/

1

你的問題的措辭不清楚,你的正則表達式並沒有多大意義,但如果你只是想匹配任何看起來像一個HTML標籤這應該這樣做:

"<[^<>]+>" 

這將同時匹配開始和結束標記(例如,<tag attr="value"></tag>)。如果您想僅匹配自動關閉標籤(例如,<tag />),這應該工作:

"<[^<>]+/>" 

還有人建議,斜槓(/)具有特殊的意義,需要逃過一劫,但事實並非如此。如果您使用的是Perl,您可以使用此命令來執行替換:

s/<[^<>]+\/>/ /g 

但是斜線本身沒有特殊含義;我只需要轉義它,因爲我用它作爲正則表達式分隔符。我可以簡單地使用不同的分隔符:

s~<[^<>]+/>~ ~g 

但是R不像Perl那樣在語言級別支持正則表達式;正則表達式和替換是以字符串文字的形式編寫的,就像它們在Java和C#中一樣。不像PHP,它不需要你仍要添加分隔符,如:

preg_replace("/<[^<>]+\/>/", " ") 

但即使PHP可以讓你選擇自己的分隔符:

preg_replace('~<[^<>]+/>~', ' ') 

之前有人叫我出去這,我知道<[^<>]+>是有缺陷的 - 實際上沒有任何HTML標籤正確的正則表達式。這在很多情況下都會執行,但解析HTML的唯一真正可靠的方法是使用專用的HTML解析器。

+0

我回答了我自己的問題,我希望我讓自己更清楚。 – PoLuX 2012-03-26 08:29:00