[英]How to extract a float from a string after a keyword in python
我有以下字符串,我需要从中提取值 14.123456,该值直接位于关键字航空公司频率之后:(这是我的字符串中的唯一关键字)
请帮助找到正确的正则表达式(索引 m.group() 不能超过 0)
import re
s = "DATA:init: 221.000OTHER:airline_freq: 14.123456FEATURE:airline_amp: 0.333887 more text"
m = re.search(r'[airline_freq:\s]?\d*\.\d+|\d+', s)
m.group()
$ result 221.000
您可能可以使用这个:
(?<=airline_freq:)\s*(?:-?(?:\d+(?:\.\d*)?|\.\d+))
这使用后向检查来强制数字前面是airline_freq:
但它不会使其成为匹配的一部分。
正则表达式的数字匹配部分可以匹配带有或不带有.
并且,如果有.
, 它也可以只是前导或尾随(在这种情况下显然不在-
符号之前)。 您还可以通过使用[+-]
代替-
来允许可选的+
代替-
。
不幸的是,似乎 Python 不允许可变长度向后看,所以我不能把\s*
放在里面; 结果是:
和数字之间的空格是匹配的一部分。 这通常没有问题,因为在为程序提供数字时通常会自动跳过前导空格。
但是,您仍然可以删除上面正则表达式中的第一个?:
以进行数字匹配组捕获,以便该数字可用作\1
。
例子在这里。
这将仅匹配作为单个组的浮点数。
r'airline_freq:\s+([-0-9.]+)'
"DATA:init: 221.000OTHER:airline_freq: 14.123456FEATURE:airline_amp: 0.333887 more text"
我有这个:
(?<=airline_freq\:\s\s)(\d+\.\d+)
In [2]: import re
...: s = "DATA:init: 221.000OTHER:airline_freq: 14.123456FEATURE:airline_amp: 0.333887 more text"
...: m = re.search(r'(?<=airline_freq\:\s\s)(\d+\.\d+)', s)
...: m.group()
Out[2]: '14.123456'
如果您不确定 airport_freq: 和所需浮点数之间的空格数,您可以使用:
(?<=airline_freq\:)\s*(\d+\.\d+)
和m.group().lstrip()
摆脱左边的空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.