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