繁体   English   中英

Python正则表达式点字符

[英]Python regular expression dot character

我已经通过WiktorStribiżew的建议解决了这个问题。

编辑:我只需要一次提取列表的第一个元素,因为我需要对该数字进行其他操作。 我在代码中使用循环只是为了测试。

我想将算术表达式拆分为数字列表。

例如:1 + 0.2-(3 ^ 4)* 5-> ['1','0.2','3','4','5']

我在python中使用了re库,但是表达式以点字符'。'分隔。 尽管我不包括“。” 在发呆者中。

即,当输入为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)

我真的很感谢对此问题的任何看法!

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

如果您只想提取正整数,请尝试以下操作。 我已经假设符号和数字之间是空格:

[int(s) for s in str.split() if s.isdigit()]

由于以下三个原因,它比regex示例更好:不需要其他模块,因为不需要解析regex迷你语言,因此更具可读性,并且速度更快。

您的方法不起作用的原因是您使用+-/创建了一个包含点的字符范围。 我也认为您使事情复杂化了。

import re
str = '1+0.2-(3^4)*5'
res = re.split(r'[-+()/*^]+', str)
print(res)

将输出['1', '0.2', '3', '4', '5']

请注意,这种方法不能正确处理负数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM