问题:
我有一个包含不同数字、数学符号和单词的字符串,例如
str = ".1**2 + x/(10.0 - 2.E-4)*n_elts"
我想提取所有数字并保留数字之间的部分,以便以后可以再次将它们放在一起(在处理数字之后)。
lst = [".1", "**", "2", " + ", "x/(", "10.0", " - ", "2.E-4", ")*n_elts"]
将是许多可接受的结果之一。不是数字的元素可以以任意方式进一步拆分,因为下一步将是
"".join(process(l) for l in lst)
过程可能看起来像这样(欢迎提出更好的检查方法l
的建议):
def process(l):
try:
n = float(l)
except ValueError:
return l
else:
return work_on_it(l)
当前状态:
从这个答案中,我想出了如何保留分隔符并努力做到
lst = re.split('( |\+|\-|\*|/)', ".1**2 + x/(10.0 - 2.E-4)*n_elts")
现在我需要以某种方式避免拆分2.E-4
.
我试图制定一个覆盖所有可能出现和思考的数字的正则表达式(vi 语法,希望这是通用的)
\d*\.\d*[E|e]*[|+|-]*\d*
应该可以。
一种策略是以某种方式将其纳入re
.
我还找到了一个相关的答案,似乎在做数字匹配部分。它可能比我需要的复杂一点,但主要是我不知道如何将它与保留分隔符位结合起来。