我有一个字符串,它由小写字母和数字(整数或浮点数)的交替字符串组成,长度任意。我希望将其分成部分,每个部分的最大可能大小是一个字符串或者代表数字的字符串。
我不需要考虑数字的特殊形式,例如指数、十六进制等等,只需要简单的浮点型或整数。
以下是一些例子:
然而,以下调用应该会引发一些错误:
我不需要考虑数字的特殊形式,例如指数、十六进制等等,只需要简单的浮点型或整数。
以下是一些例子:
>>> split("")
()
>>> split("p")
('p',)
>>> split("2")
('2',)
>>> split("a2b3")
('a', '2', 'b', '3')
>>> split("a2.1b3")
('a', '2.1', 'b', '3')
>>> split("a.1b3")
('a', '.1', 'b', '3')
然而,以下调用应该会引发一些错误:
>>> split(3)
>>> split("a0.10.2")
>>> split("ab.c")
我第一次尝试使用 re.split
。然而,这种尝试相当幼稚,它不会保留分隔符,以防我使用这些字母:
>>> re.split("[a-z]", "a.1b3")
['', '.1', '3']
我的第二次尝试是使用itertools.groupby
。 问题在于它不关心数字的形式,所以例如:
>>> islowalpha = labmda s: str.isalpha(s) and str.islower(s)
>>> [''.join(g) for _, g in itertools.groupby("a0.10.2b", islowalpha)] # should raise
['a', '0.10.2', 'b']
注意:对于输出的形式,我并不在意,只要它可以迭代即可。
注意:我已经阅读了这篇文章,但是我无法将解决方案适应到我的问题上。主要的区别是我需要允许仅有可接受的数字,而不是简单的数字和点号列表。
"a0.10.2"
有什么问题,为什么它与"a2.1b3"
不同? - Roman Bodnarchuk0.10.2
既不是一个数字,也不是数字和小写字符串的交替子串。 - Bach