簡體   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