2017-04-22 1 views
0

ein Wörterbuch haben zu extrahieren, von wo ich aus dem data['longitude'] und data['latitude'] wie folgt drucken konnten.Benötigen regex Zeichen von Python-Wörterbuch

(91°38'28.2"E)(22°40'34.3"N) 
(92°04´14.1´´E)(21°37´00.8´´N) 
(E-092° 15. 715')(N-20° 56.062') 
(91°49'10.63"E)(24°20'05.40"N) 
(91°26'31.92"E)(24°07'35.15"N) 
(90°08'15.07"E)(24°41'14.71"N) 
(90°04'7.97"E)(24°42'29.34"N) 
(90°04'10.06"E)(24°42'32.8"N) 
(E-092° 15.776')(N-20° 56.065') 
(91°46'26.90"E)(24°18'47.16"N) 
(E-092° 15.649')(N-20° 56.023') 
(91°46'26.90"E)(24°18'47.16"N) 
(91°49'08.08"E)(24°20'06.33"N) 
(92° 2'31.25"E)(21°20'58.79"N) 
(E-092° 15.776')(N-20° 56.065') 
(E-092° 15. 486')(N-20° 56.022') 

Ich bin diese Zahlen in Dezimalgrade zu konvertieren. Beispiel:

Typische Python-Zeichenaufteilung konnte nicht funktionieren, da die Zahlen inkonsistente Muster aufweisen.

(data['longitude'][:3]) + (data['longitude'][5:2]/60) + (data['longitude'][8:5]/3600) 

I verwendet this thread diese Werte aus einer docx-Datei zu extrahieren. Jetzt bin ich wieder fest.

+0

was ist Ihre Eingabe, eine Liste von Tupeln oder eine Liste von Strings? – RomanPerekhrest

+0

Haben Sie versucht, in einem Online-Regex-Tester herumzuspielen? Wie regex101.com? – wwii

+0

Unicode oder ASCII? – wwii

Antwort

1

könnten Sie gehen für (a demo on regex101.com sehen):

import re 

coordinates = """ 
(91°38'28.2"E)(22°40'34.3"N) 
(92°04´14.1´´E)(21°37´00.8´´N) 
(E-092° 15. 715')(N-20° 56.062') 
(91°49'10.63"E)(24°20'05.40"N) 
(91°26'31.92"E)(24°07'35.15"N) 
(90°08'15.07"E)(24°41'14.71"N) 
(90°04'7.97"E)(24°42'29.34"N) 
(90°04'10.06"E)(24°42'32.8"N) 
(E-092° 15.776')(N-20° 56.065') 
(91°46'26.90"E)(24°18'47.16"N) 
(E-092° 15.649')(N-20° 56.023') 
(91°46'26.90"E)(24°18'47.16"N) 
(91°49'08.08"E)(24°20'06.33"N) 
(92° 2'31.25"E)(21°20'58.79"N) 
(E-092° 15.776')(N-20° 56.065') 
(E-092° 15. 486')(N-20° 56.022') 
""" 

rx = re.compile(r"(?P<degree>-?\d+)°\s*(?P<minute>[^'´]+)'") 

def convert(match): 
    try: 
     degree = float(match.group('degree')) 
     minute = float(match.group('degree')) 
     result = degree + minute/60 
    except: 
     result = -1 
    finally: 
     return result 

coordinates_new = [convert(match) for match in rx.finditer(coordinates)] 
print(coordinates_new) 
+0

Danke @ Jan. I am Ende dieses Ausdruck verwendet -???? '((P \ d +) ° \ s * (P [^ \ ''] +) [\''] \ b (P [^ \"'' ]))). "Ich musste auch die Sekunden konvertieren. Ich denke, Sie müssen" Grad "in" Minute "innerhalb von" Minute = Float (match.group ('degree')) '' ändern. –