我正在研究一个解析器函数,它最终将用于钢铁构件重量的计算。该函数接受一个简单的输入字符串,并返回单个值(数量、口径、分隔)作为列表中的变量。
例如,它应该使用"5#5“(5个5条)并返回5,5,0。或"#5@ 250“(5小节间距为250毫米)并返回0,5,250。很简单。
我的方法是对其使用正则表达式,然后使用re.search或split来获取各个组件。第一种情况是"\d+#\d+",第二种是"#\d+@\d+“。
问题是当我的输入有小数的时候。在某些情况下,可能有人会指定"#5@122.5“。在这种情况下,我的正则表达式搞砸了,我得到的是"122“而不是"122.5”。我一直在寻找浮点数的正则表达式,但据我所见,这个表达式变得非常庞大,非常快。
在将来,我想增加对像“#5@2501500 t”这样的表达式的支持(5在250 to长,500 to横向),这使得正则表达式更大、更复杂。
这让我怀疑: regex是解决这一问题的最佳方法吗?或者,我还可以使用其他的东西来更好地检测表达式格式,并相应地进行分离吗?
发布于 2022-01-06 20:41:51
在我看来,您应该避免在本例中使用regex,并尝试这样的方法(这是原始的,但可以很容易地扩展以满足更详细的需求):
def bar_split(text):
if "@" not in text:
print(text.split("#") + ["0"])
else:
print(["0"] + text[1:].split("@"))
bar_split("5#5") # ['5', '5', '0']
bar_split("#5@250") # ['0', '5', '250']https://stackoverflow.com/questions/70612355
复制相似问题