重新搜索以获取十进制数

重新搜索以获取十进制数

我正在尝试从文本文件中获取数字。我需要完整的十进制数。该行如下所示:

corner_lat:     49.0425000  decimal degrees

我正在尝试

    if "corner_lat" in line:
        nlines = re.search(r'(\d+)\D+', line).group(1)
        nlines = float(nlines)  # type:
        print(nlines) 

但我只得到一位小数(49.0)。我应该如何更改 re.search 以获取完整数字?

答案1

您的模式(\d+)仅匹配数字并仅捕获49。在下一行中,您将其转换49为浮点数,结果为49.0

调整模式以匹配数字和点或匹配数字一个点, 其次是数字

# match arbitrary number and order of digits and dots.
# Note that this also would match "49.123.4.5":
nlines = re.search(r'([\d.]+)\D+', line).group(1)

# or match N digits, ONE dot, N digits:
nlines = re.search(r'(\d+\.\d+)\D+', line).group(1)

您也可以省略该\D部分,因为正则表达式默认为贪婪的:它们试图在满足整体模式的同时尽可能多地选择数字。换句话说,它试图找到最长的数字数字因此会自动停止在非数字 ( \D) 处:

nlines = re.search(r'(\d+\.\d+)', line).group(1)

注意:当点\.位于字符类因为一个点匹配任何字符。当位于字符类中时不需要此属性,即[.]不匹配任何字符,而只是一个文字点。

相关内容