Python Regex 匹配 float 一定次数

标签 python regex

我有这样的数据:

data = '5.2 -34 435, 34 2.908 3, 50 2 54 3, 40 50'

我正在尝试编写一个正则表达式,使由 re.findall 创建的 Python 列表中的每个项目仅包含 3 个或更少的数字,如上所示以逗号分隔。

如果有超过 3 个以逗号分隔的数字,则将剩余的数字放在列表中下一项的逗号之前(只要它小于或等于 3)

理想情况下,上述数据的输出应该是这样的

['5.2 -34 435','34 2.908 3','50 2 54','3','40 50']

我试着写了下面的教程,但似乎效果不太好......

re.findall(r"[-+A-z0-9.\s]{3}", data)

最佳答案

这可以通过使用此正则表达式的 findall 在单个操作中实现:

[+-]?\d+(?:\.\d+)?(?:\s+[+-]?\d+(?:\.\d+)?){0,2}

RegEx Demo

  • 这里我们使用 [+-]?\d+(?:\.\d+)? 作为匹配有符号数的模式,它可能是也可能不是 float 。
  • (?:\s+[+-]?\d+(?:\.\d+)?){0,2} 匹配该数字的更多 0 到 2 个实例 代码:
import re
data = '5.2 -34 435, 34 2.908 3, 50 2 54 3, 40 50'
rx = re.compile(r'[+-]?\d+(?:\.\d+)?(?:\s+[+-]?\d+(?:\.\d+)?){0,2}')
print (rx.findall(data))

输出:

['5.2 -34 435', '34 2.908 3', '50 2 54', '3', '40 50']

关于Python Regex 匹配 float 一定次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68139498/

相关文章:

java拆分末尾缺少逗号

javascript - 如何实现条件中的任意数字?

python - 用于递归连接的 TensorFlow 高效共享内存分配

python - 连体网络,下部使用密集层而不是欧氏距离层

python - 在 PyQt 中正确定位弹出窗口小部件

python - 两个字符串python之间的正则表达式文本

mysql - 如果最后 2 个字符匹配,则 SQL 替换最后 2 个字符

python - 在正则表达式中达到 search() 和 findall() 之间的中间立场

python - MySQLdb Python 连接器构建和安装命令 'gcc-4.2' 失败,退出状态为 255

python - 尝试在keras中拟合CNN模型时发生`InvalidArgumentError`?