Python中的正则表达式 - 字符串之间的字符串,不包括空格

时间:2015-04-20 21:09:50

标签: python regex

我现在已经对这个问题感到难过了。我有以下字符串:

LAT:  6.90N    LON: 80.58E    ELEV: 1097.6M

我需要提取6.90N80.58E1097.6M

问题是我迭代了其他类似格式的文件。有一些文件缺少值或其他字符(如果没有值,则为*****)。

我希望能够尽可能地捕捉这些。有没有办法编写正则表达式来捕获LAT:LON:ELEV:之间的值,而不包括空格?

3 个答案:

答案 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])