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