2011-08-14 10 views
5

Supongamos que tengo cuerda, como a continuación:eliminar cualquier cosa dentro de un par de paréntesis utilizando gsub en I

<a>b<c> 

Quiero eliminar tanto <a> y <c>, pero no puedo utilizar gsub("<.*>","","<a>b<c>") como se eliminará el b además.

Hice una pregunta similar antes, pero en un segundo pensamiento, creo que debería aprender en general, cómo lidiar con este tipo de problemas. Gracias.

+1

La solución más general es utilizar un analizador. A menos que pueda estar seguro de que no hay símbolos que se hayan escapado, que cada símbolo coincida, que no se produzca el anidamiento, y muchas otras advertencias, lo mejor es usar un analizador sintáctico. Hay una pregunta bastante famosa sobre SO sobre expresiones regulares y HTML. Aunque no ha mencionado HTML, parece que podría dirigirse a lenguajes de marcado como HTML y XML. – Iterator

Respuesta

11

No permita que un paréntesis de cierre > en la materia entre los corchetes:

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

Puede usar una expresión regular no codiciosa, p. Ej. /<.*?>/.

Esto solo funcionará para HTML simple y se puede subvertir fácilmente. Considere el siguiente HTML, que no se puede eliminar fácilmente con expresiones regulares.

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

No, no está bien > gsub ("/ <.*> /", "", "b ") [1]" b " – lokheart

+3

ha perdido una '?' en la expresión regular –

4

Una idea más, a menudo muy útil en entornos ruidosos (es decir, cuando se trata más cerca de hacer un tokenizer) :

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