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