2017-07-31 1 views
1

j'ai une chaîne:gsub et de supprimer tous les caractères entre < and > dans R

a="<gml:posList srsDimension=\"2\" count=\"5\">7 -5.067 -3 56.7 -3.3 58.3 -5.65 57 -8.33</gml:posList>" 

et veulent gsub tout entre les < et>, maintenant en vain jusqu'à présent. Je veux avoir seulement les nombres restants (ie 7 -5 -3 56 -3 58 ...) où je peux prendre chaque élément pair/impair à traiter.

J'ai essayé Remove all text between two brackets en vain

> gsub('<^|*>','',a[[1]],perl=TRUE) 
Error in gsub("<^|*>", "", a[[1]], perl = TRUE) : 
    invalid regular expression '<^|*>' 
In addition: Warning message: 
In gsub("<^|*>", "", a[[1]], perl = TRUE) : PCRE pattern compilation error 
    'nothing to repeat' 
    at '*>' 

et

gsub('<gml.+>\\d','',a[[1]]) 

qui coupe supprime le premier chiffre

Je suis sûr que je manque quelque chose d'évident, comme '<' est pas un caractère spécial.

Voici quelques autres essais (et échoue)

> gsub('<.+>','',a[[1]]) 
[1] "" 
> gsub('<.+>.+<.+>','',a[[1]]) 
[1] "" 
> gsub('<gml.+>','',a[[1]]) 
[1] "" 
+0

'stringr :: mot (a, 3, sep = '> | <')' – Sotos

+0

D'où proviennent les données? 'gml' suggère une sorte de langage de balisage - il peut y avoir des outils spécifiques pour lire ce type de données. – user20650

Répondre

7

Vous pouvez utiliser

gsub("<[^>]+>", "",a) 
[1] "7 -5.067 -3 56.7 -3.3 58.3 -5.65 57 -8.33" 

"<" et ">" sont littérales, "[^>]" correspond à tout caractère n'est pas ">" et "+" permet une ou plusieurs correspondances. L'utilisation de gsub répète ce match autant de fois que ce motif est trouvé. Le motif est remplacé par la chaîne vide "".

+0

fonctionne parfaitement. Merci pour l'explication aussi! – alex

0
library(qdapRegex) 
a="<gml:posList srsDimension=\"2\" count=\"5\">7 -5.067 -3 56.7 -3.3 58.3 -5.65 57 -8.33</gml:posList>" 
rm_between(a, "<", ">", extract = T)