2011-08-14 48 views
5

假設我有串象下面這樣:一對R中使用GSUB括號內刪除任何

<a>b<c> 

我想刪除這兩個<a><c>,但我不能使用gsub("<.*>","","<a>b<c>"),因爲這將刪除b也。

我之前問過類似的問題,但第二個想法,我認爲我應該總體學習如何處理這類問題。謝謝。

+1

更一般的解決方案是使用解析器。除非可以確定沒有轉義符號,每個符號匹配,嵌套不會發生以及許多其他警告,否則最好使用解析器。關於正則表達式和HTML,有一個非常有名的問題。儘管你沒有提到過HTML,但它看起來像你可能正朝着HTML和XML等標記語言的方向發展。 – Iterator

回答

11

不要讓一個右括號>在東西方括號之間:

z <- "<a>b<c>" 
gsub("<[^>]+>","",z) 
4

你可以使用一個非貪婪的正則表達式,例如。 /<.*?>/

這隻適用於簡單的HTML,可以很容易地被顛覆。考慮下面的HTML,使用正則表達式不容易刪除它。

<span title="Help > Index"> 
+0

不,不正常 > GSUB( 「/ <.*> /」, 「」, 「 b 」) [1]「 b 」 – lokheart

+3

您已錯過了一個 '?'在正則表達式中。 –

4

還有一個想法,往往是相當嘈雜設置有用的(即當談到接近做出一個標記) :

strsplit("<a>b<c>",split='<|>')[[1]][3]