繁体   English   中英

如何在 python 中的关键字之后从字符串中提取浮点数

[英]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'

测试: https://regexr.com/51q41

如果您不确定 airport_freq: 和所需浮点数之间的空格数,您可以使用:

(?<=airline_freq\:)\s*(\d+\.\d+)

m.group().lstrip()摆脱左边的空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM