Python正则表达式点字符

时间:2016-11-04 08:26:06

标签: python regex

我已经通过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)

我真的很感激对这个问题的任何意见!

3 个答案:

答案 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']

请注意,此方法无法正确处理负数。