我现在已经对这个问题感到难过了。我有以下字符串:
LAT: 6.90N LON: 80.58E ELEV: 1097.6M
我需要提取6.90N
,80.58E
和1097.6M
。
问题是我迭代了其他类似格式的文件。有一些文件缺少值或其他字符(如果没有值,则为*****
)。
我希望能够尽可能地捕捉这些。有没有办法编写正则表达式来捕获LAT:
,LON:
和ELEV:
之间的值,而不包括空格?
答案 0 :(得分:3)
这个怎么样:
>>> s = "LAT: 6.90N LON: 80.58E ELEV: 1097.6M"
>>> m = re.findall(r'(\d+\.\d+[A-Z])', s)
>>> print m
['6.90N', '80.58E', '1097.6M']
细分:
( # start of capturing group
\d+ # one or more numbers
\. # a dot(escaped)
\d+ # one or more numbers
[A-Z] # a letter
) # end of capturing group
答案 1 :(得分:1)
你不需要正则表达式:
input_str = 'LAT: 6.90N LON: 80.58E ELEV: 1097.6M'
# Split into strings separated by whitespace
parts = input_str.split()
# Take every other item from the list, skipping the first
lat, lon, elev = parts[1::2]
如果每一行都具有它具有的格式"变量"由空格分隔,但可以有不同的变量集,你可以只使用字典:
def line_to_dict(input_str):
parts = input_str.split()
return dict(itertools.izip(parts[::2], parts[1::2]))
答案 2 :(得分:1)
鉴于你目前的问题,没有必要重新做,我会这样做:
s = 'LAT: 6.90N LON: 80.58E ELEV: 1097.6M'
l = s.split()
if l[1] != '*'*len(l[1]):
print(l[1], l[3], l[5])