【发布时间】:2021-12-14 19:51:52
【问题描述】:
我正在使用 python 的 re 库来执行此操作,但这是一个基本的正则表达式问题。
我收到一串没有空格的度-分-秒格式的坐标信息,我将其解析为离散坐标对以进行转换。
给我的字符串看起来像这样(例如假坐标):
102030N0102030E203040N0203040E304050N0304050E405060N0405060E
我是这样理解的:
coordstr = '102030N0102030E203040N0203040E304050N0304050E405060N0405060E'
coords = re.match(
re.compile(r"^(\d+[NS]{1}\d+[EW]{1})(\d+[NS]{1}\d+[EW]{1})(\d+[NS]{1}\d+[EW]{1})(\d+[NS]{1}\d+[EW]{1})"),
coordstr)
for x in coords.groups():
print(x)
这给了我
102030N0102030E
203040N0203040E
304050N0304050E
405060N0405060E
并允许我将每个坐标对称为coords.group(1)、coords.group(2) 等等。
所以它有效,但感觉我在模式中过于冗长。是否有更简洁的方法来使用其中一个捕获组来抓取行,并将遇到的每个匹配组添加到.groups()?我知道我可以通过蛮力字符串切片来做到这一点,但这似乎比它的价值更麻烦。
我已经阅读了this,但它似乎并没有解决我在这个问题中要解决的问题。
因为这是针对企业的,并且这些字符串描述了栅格边界,所以我将在引入正则表达式搜索之前验证字符串,如果未找到(或损坏)字符串,则回退到 gdal 对象。
【问题讨论】:
-
re.findall(r'\d+[NS]\d+[EW]', coordstr)工作是否足够好?它只匹配字符串中的所有匹配项。或者,您是否还需要对字符串进行预验证,并且仅在字符串与此特定格式匹配时提取四个部分? -
效果很好。我可以依靠每次维护的顺序吗?因为这是针对企业的,并且这些字符串描述了栅格边界,所以我将在引入正则表达式搜索之前验证字符串,如果未找到(或损坏)字符串,则回退到
gdal对象。
标签: python regex regex-group