【发布时间】:2014-04-04 12:54:02
【问题描述】:
我有一个由交替的小写字母和数字(整数或浮点数)字符串组成的字符串,它的长度是任意的,我希望将它分成多个部分,每个部分都具有最大可能的大小,这样一个部分将由一个字符串或一个(表示一个的字符串)数字组成。
我不需要考虑特殊形式的数字,例如指数、十六进制等;只是简单的浮点数或整数。
几个例子:
>>> 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']
注意:我不关心输出的形式,只要它是可迭代的。
注意:我已阅读 this,但无法根据我的问题调整解决方案。主要区别在于我只需要允许可接受的数字,而不是简单的数字和点列表。
【问题讨论】:
-
"a0.10.2"有什么问题以及为什么它与"a2.1b3"不同? -
因为
0.10.2不是数字;它也不是数字和小写字符串的交替子串。 -
知道了,错过了“交替”限制。