我正在尝试从文本文件中获取数字。我需要完整的十进制数。该行如下所示:
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)
注意:当点\.
位于字符类因为一个点匹配任何字符。当位于字符类中时不需要此属性,即[.]
不匹配任何字符,而只是一个文字点。