我已经通过WiktorStribiżew的建议解决了这个问题。
编辑:我只需要一次提取列表的第一个元素,因为我需要对该数字进行其他操作。我在代码中使用了一个循环来进行测试。
我想将算术表达式拆分为数字列表。
例如:1 + 0.2-(3 ^ 4)* 5 - > ['1','0.2','3','4','5']
我在python中使用re库,但表达式用点字符“。”分割。虽然我不包括'。'在delmiters。
即输入为1 + 0.2时,输出为['1','0','2'],应为['1','0.2']
代码如下:
#!/bin/python
import re
delims = re.compile(r"[+-/*///^)]")
while True:
string = input()
res = list()
i = 0
while i < len(string):
if string[i] >= '0' and string[i] <= '9':
num_str = delims.split(string[i:], 1)[0]
res.append(num_str)
i += len(num_str) - 1
i += 1
print(res)
我真的很感激对这个问题的任何意见!
答案 0 :(得分:0)
对re.findall
函数使用以下方法:
num_str = '1+0.2-(3^4)*5'
numbers = re.findall(r'\d(?=[^.]|$)|\d+\.\d+', num_str)
print(numbers)
输出:
['1', '0.2', '3', '4', '5']
答案 1 :(得分:0)
如果您只想提取正整数,请尝试以下操作。我认为这是simbols和数字之间的空格:
[int(s) for s in str.split() if s.isdigit()]
这比正则表达式示例更好,原因有三: 你不需要另一个模块, 它更具可读性,因为您不需要解析正则表达式迷你语言 它更快。
答案 2 :(得分:0)
您的方法无效的原因是您创建了一个包含点的+-/
字符范围。我也认为你过于复杂。
import re
str = '1+0.2-(3^4)*5'
res = re.split(r'[-+()/*^]+', str)
print(res)
将输出['1', '0.2', '3', '4', '5']
请注意,此方法无法正确处理负数。