[英]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.