簡體   English   中英

從字符串中提取浮點數 - 正則表達式 - Python

[英]Extract Floats from a String - Regex - Python

我希望能夠從字符串中提取浮點數

str = "Test string 1.234 0.155.1 5.67799350,-2.654657

結果應該是

[1.234, 5.67799350, -2.654657]

我正在使用[-+]?\d*\.\d+|\d+但它檢測到我不想要的 0.155.1 。

import re
floats = re.findall(r"[-+]?\d*\.\d+|\d+", str)

感謝您的閱讀。

我相信你在這里找到了你的代碼? 無論哪種方式,也許消極的后視和前瞻對您有用並創建更可靠的模式?

(?<!\.)[-+]?\b\d+\.\d+(?!\.)\b

查看在線演示


模式分解:

  • (?<.\.) - 文字點的負向后視。
  • [-+]? - 可選加減唱。
  • \b - 字邊界。
  • \d+\.\d+ - 一個或多個數字,一個文字點和一個或多個數字。
  • (?.\.) - 文字點的負前瞻。
  • \b - 字邊界。

在此處輸入圖像描述


Python 示例代碼:

import re 
str = 'Test string 1.234 0.155.1 5.67799350,-2.654657'
lst = [float(i) for i in re.findall(r'(?<!\.)[-+]?\b\d+\.\d+(?!\.)\b', str)]
print(lst)

結果>>

[1.234, 5.6779935, -2.654657]

利用

[-+]?\b(?<!\d\.)\d+\.\d+\b(?!\.\d)

證明

替代匹配沒有 integer 部分 ( .59 ) 並且粘在單詞字符 ( _4.567 ) 上的浮點數:

[-+]?(?<!\d\.)(?<!\d)\d*\.\d+(?!\.?\d)

查看另一個證明

它匹配可選的加/減、一個或多個數字、點、一個或多個數字,用單詞邊界包裹,而不是在數字點和點數字之間。

Python

import re 
text = 'Test string 1.234 0.155.1 5.67799350,-2.654657'
print([float(i) for i in re.findall(r"[-+]?\b(?<!\d\.)\d+\.\d+\b(?!\.\d)", text)])

結果:

[1.234, 5.6779935, -2.654657]

試試(?<.[?\d])[-+]?(:?\d+(:.\?\d*).|\?\d+)(.![.\d])

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM