我正在阅读一个文件,其中的数据行如下所示:
ifgfilename: 150304SN.0045; Channel: 1; Name of location: Boulder; Latitude of location: 40.038; Longitude of location: -105.243;
我需要提取信息,所以我写了一个像这样的正则表达式代码:
import re
with open('/Users/CALPY output/info.txt', 'rt') as infofile:
for count, line in enumerate(infofile):
with open('\\_spec_final.t15', 'w') as t:
lat = re.search('^Latitude of location: (.*)', line)
lon = re.search('^Longitude of location: (.*)', line)
date = re.search('^Time of measurement (UTC): (.*)', line)
print lat
print lon
print date
但是,它不会检索我想要的信息,因为它只是打印出来:
None
None
None
知道如何检索我需要的数字吗? (有时候我需要字符串,所以我需要一些灵活的东西)
答案 0 :(得分:1)
在每个正则表达式的开头,似乎你不必要地包括^
,这意味着行开始。同时将.*
更改为一组所有字符,但分号([^;]+
)与您想要的值相匹配。在我的测试中,我的外壳有问题,出于同样的原因,你可能会得到None,所以我也添加了它。
lat = re.search('Latitude of location:\s*([^;]+)', line, re.IGNORECASE)
lon = re.search('Longitude of location:\s*([^;]+)', line, re.IGNORECASE)
date = re.search('Time of measurement (UTC):\s*([^;]+)', line, re.IGNORECASE)
print lat.group(1)
print lon.group(1)
print date.group(1)
Python也支持外观,因此避免不必要分组的替代方案是:
(?<=Latitude of location: )[^;]+