如何编写Python正则表达式实现坐标数值匹配
现有正则的问题
- 未匹配可选负号:你的写法没有覆盖坐标前可能存在的负号,之前尝试的
[^-\d]是排除匹配规则,作用是匹配「不是负号也不是数字的字符」,自然不能用来匹配负号 - 小数点未转义:正则里的
.默认匹配任意字符,需要转义为\.才能仅匹配小数点 - 整数位仅匹配单个:开头的
\d只能匹配1位整数,遇到多位整数(比如123.xxxx)就会匹配不全 - 仅匹配单段坐标:原正则只匹配第一段坐标加空格,没有覆盖后续的坐标内容
正确写法
如果是要提取行内所有坐标值,使用如下正则即可:
re.compile(r'-?\d+\.\d{14}')
规则说明:
-?:匹配可选的负号\d+:匹配1位及以上的整数部分\.:精确匹配小数点\d{14}:匹配14位小数部分,如果你对小数位数没有严格要求,可以替换为\d+
使用示例
提取所有坐标值
import re coord_pattern = re.compile(r'-?\d+\.\d{14}') # 示例坐标行 test_str = "31.23456789012345 -121.76543210987654" coords = coord_pattern.findall(test_str) print(coords) # 输出:['31.23456789012345', '-121.76543210987654']
校验整行是否符合坐标格式(以两坐标空格分隔为例)
如果需要确认一整行完全是坐标格式,可以使用如下正则:
re.compile(r'^-?\d+\.\d{14}\s+-?\d+\.\d{14}$')
内容的提问来源于stack exchange,提问作者saya
相关产品推荐
相关产品推荐

