我正在使用 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()遇到每個匹配組時將其添加到其中?我知道我可以用蠻力字串切片來做到這一點,但這似乎比它的價值更麻煩。
我讀過這個,但它似乎沒有解決我在這個問題中要追求的問題。
因為這是針對企業的,并且這些字串描述了光柵邊界,所以我將在引入正則運算式搜索之前驗證該字串,gdal如果未找到(或損壞)該字串,則回退到一個物件。
uj5u.com熱心網友回復:
由于您將預先驗證將使用正則運算式處理的字串,因此您無需將re.search/re.match與具有相同模式的多個組一起使用,您可以使用從您的字串中re.findall獲取所有\d [NS]\d [EW]模式匹配:
import re
coordstr = '102030N0102030E203040N0203040E304050N0304050E405060N0405060E'
coords = re.findall(r'\d [NS]\d [EW]', coordstr)
for x in coords:
print(x)
輸出:
102030N0102030E
203040N0203040E
304050N0304050E
405060N0405060E
請參閱Python 演示。
注意:re.findall 回傳的匹配串列將始終與它們在源文本中的順序相同,請參閱此 SO 帖子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341635.html
