如何解析含多种分隔符的经纬度字符串并转换为浮点型?
解决经纬度字符串转浮点型数值的问题
你的问题出在正则表达式\d+只能匹配连续整数,无法识别浮点数里的小数点。下面提供两种可行的解决方案:
方法一:使用匹配浮点数的正则表达式
修改正则规则,让它能识别包含小数点的数值,同时支持可选的负号(适配南纬/西经的负数场景):
import re # 测试所有格式的输入 test_cases = [ '28.111,77.222', '28.111, 77.222', '28.111 77.222', '28.111 77.222', '-28.111, 77.222', '28,77.222' ] for test in test_cases: # 匹配浮点数:支持正负号、整数/小数形式 coords = re.findall(r'-?\d+(?:\.\d+)?', test) if len(coords) >= 2: lat = float(coords[0]) lon = float(coords[1]) print(f"输入: {test} → 纬度: {lat}, 经度: {lon}") else: print(f"输入: {test} → 格式错误,无法提取有效经纬度")
正则表达式-?\d+(?:\.\d+)?的含义:
-?:匹配可选的负号\d+:匹配至少1位整数部分(?:\.\d+)?:非捕获组,匹配可选的「小数点+至少1位小数」,?表示该部分可省略(支持纯整数的经纬度)
方法二:统一分隔符后分割字符串
如果输入格式比较规范(只有逗号、空格作为分隔符),可以先把逗号替换成空格,再用split()自动处理多空格,最后分割转换:
test = '28.111, 77.222' # 把逗号换成空格,再合并多空格为单空格后分割 cleaned = ' '.join(test.replace(',', ' ').split()) lat_str, lon_str = cleaned.split() lat = float(lat_str) lon = float(lon_str) print(f"纬度: {lat}, 经度: {lon}")
这种方法逻辑更直观,适合格式固定的场景。
内容的提问来源于stack exchange,提问作者zxdawn
相关产品推荐
相关产品推荐

