我有这样的数据:
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}
- 这里我们使用
[+-]?\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/