繁体   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