@@ -156,8 +156,8 @@ def parse_compressed(body):
156156def parse_normal (body ):
157157 parsed = {}
158158
159- match = re .findall (r"^(\d{2})([0-9 ]{2}\.[0-9 ]{2})([NnSs])([\/\\0-9A-Z])"
160- r"(\d{3})([0-9 ]{2}\.[0-9 ]{2})([EeWw])([\x21-\x7e])(.*)$" , body )
159+ match = re .findall (r"^(\d{2})([0-9 ]{2}\.[0-9 ]{1, 2})([NnSs])([\/\\0-9A-Z])"
160+ r"(\d{3})([0-9 ]{2}\.[0-9 ]{1, 2})([EeWw])([\x21-\x7e])(.*)$" , body )
161161
162162 if match :
163163 parsed .update ({'format' : 'uncompressed' })
@@ -175,9 +175,12 @@ def parse_normal(body):
175175 ) = match [0 ]
176176
177177 # position ambiguity
178- posambiguity = lat_min .count (' ' )
178+ # Strip trailing spaces before counting (trailing spaces are not part of ambiguity)
179+ lat_min_stripped = lat_min .rstrip (' ' )
180+ lon_min_stripped = lon_min .rstrip (' ' )
181+ posambiguity = lat_min_stripped .count (' ' )
179182
180- if posambiguity != lon_min .count (' ' ):
183+ if posambiguity != lon_min_stripped .count (' ' ):
181184 raise ParseError ("latitude and longitude ambiguity mismatch" )
182185
183186 parsed .update ({'posambiguity' : posambiguity })
@@ -187,8 +190,9 @@ def parse_normal(body):
187190 lat_min = "30"
188191 lon_min = "30"
189192 else :
190- lat_min = lat_min .replace (' ' , '5' , 1 )
191- lon_min = lon_min .replace (' ' , '5' , 1 )
193+ # Use stripped versions for ambiguity replacement
194+ lat_min = lat_min_stripped .replace (' ' , '5' , 1 )
195+ lon_min = lon_min_stripped .replace (' ' , '5' , 1 )
192196
193197 # validate longitude and latitude
194198
0 commit comments