2017-01-24 4 views
1

Ich kratze eine Webkarte durch Herunterladen seiner HTML-Code und ich möchte Koordinaten von einigen Punkten durch das Abgleichen von regulären Ausdrücken extrahieren. Ich habe erreicht, die Mehrheit der Koordinaten mit dem folgenden Code zu extrahieren:Übereinstimmende Koordinaten mit verschiedenen Zeichen in R

library(stringr)  
unique(str_extract_all(doc,"\\[[[:digit:]]+[.][[:digit:]]+[,][[:punct:]][[:digit:]]+[.][[:digit:]]+\\]")[[1]]) 

Dieser Code extrahiert Fälle, in denen der Breitengrad negativ ist, aber manchmal negativ ist. Und ich muss das Symbol "[" angeben, um Punkte, aber keine Grenzen der Karte zu extrahieren. Das heißt, ich brauche so etwas wie

[10.6302565,-74.9131161] 

erhalten, aber ich brauche Ergebnisse enthalten wie

[-10.6302565,-74.9131161] 

Ich werde mit Ihrer Hilfe dankbar. Vielen Dank.

Aditional

ich auch doc. Ich diesem Fall habe ich positive Breite haben:

i<-"https://www.google.com/maps/d/embed?mid=1YhVS6Z--LIc5k9rstJ24tYcb-Nc" 
doc<-readLines(url(i)) 
doc<-doc[7] 
doc<-iconv(doc,"latin1","ASCII","") 

In diesem Fall habe ich negativ Breite:

i<-"https://www.google.com/maps/d/embed?mid=1vq9uMa8L0PxnrhG-m3z3Jt-HDh4" 
doc<-readLines(url(i)) 
doc<-doc[7] 
doc<-iconv(doc,"latin1","ASCII","") 
+0

Bitte zeigen Sie einige Zeilen von 'doc' – akrun

+0

Sie meinen, Sie müssen eine optionale minus? ['" \\ [-? \\ d + [.] \\ d +, -? \\ d + [.] \\ d + \\] "'] (https://regex101.com/r/DhR7SS/1) ? –

+0

Wiktor ja, mit '-?' Es funktioniert für mich. Vielen Dank. – fcochaux

Antwort

0

Sie verwenden können

"\\[-?\\d+[.]\\d+,-?\\d+[.]\\d+\\]" 

die regex demo See. Beachten Sie, dass die -? (die mit 1 oder 0 Minuszeichen übereinstimmt) nach \\[ hinzugefügt und die [[:punct:]] durch -? nach , ersetzt wird. Ich habe auch unnötige Escape-Symbole entfernt.

> library(stringr)  
> i<-"https://www.google.com/maps/d/embed?mid=1YhVS6Z--LIc5k9rstJ24tYcb-Nc" 
> doc<-readLines(url(i)) 
> doc<-doc[7] 
> unique(str_extract_all(doc,"\\[-?\\d+[.]\\d+,-?\\d+[.]\\d+\\]")[[1]]) 
[1] "[10.6302565,-74.9131161]" "[10.8632551,-74.7769001]" 
[3] "[10.9827508,-74.783735]" "[10.9419975,-74.7826532]" 
+0

Froh, dass es für dich funktioniert hat. Bitte bedenken Sie auch, dass eine Antwort hilfreich ist, wenn meine Antwort für Sie hilfreich war (siehe [Wie kann ich auf Stack Overflow upvoten?] (Http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) . –

Verwandte Themen