2013-02-22 35 views
-1

我想知道什么是最简单的方法(可能是正则表达式)以下面的方式分隔字符串中的数字。 例子:"abc12de34f5" 到:["abc", "12", "de", "34", "f", "5"]蟒蛇在字符串中分割数字

但是如果一起选择标记的字符串单独这样: 例子:"abc1,2de3.4f5" 到:["abc", "1,2", "de", "3.4", "f", "5"]

感谢您的任何建议和意见

回答

5
>>> import re 
>>> s = "abc12de34f5" 
>>> re.findall(r'[\d\W]+|[a-zA-Z]+', s) 
['abc', '12', 'de', '34', 'f', '5'] 
>>> t = "abc1,2de3.4f5" 
>>> re.findall(r'[\d\W]+|[a-zA-Z]+', t) 
['abc', '1,2', 'de', '3.4', 'f', '5'] 
+1

@eumiro:好的电话。固定。 – 2013-02-22 10:28:36

+0

谢谢@Joel Cornett,工作正常,但是我需要在unicode文本(cyrilic)上做到这一点,在这种情况下如何使用regula表达式? 我想你[a-яА-Я]将不起作用。谢谢 – 2013-02-22 10:59:57

+0

@BoldO:虽然你可能需要做几个范围(即'[a-zA-ZÀ-ῼ]')来匹配你想要的字符,你可以修改任何字符范围的'[a-z]'。另外,请确保在're.findall()'上指定're.UNICODE'标志,以使'\ d'和'\ W'正常工作。 – 2013-02-22 18:14:18

2

使用itertools.group的非正则表达式解决方案

>>> st = "abc1,2de3.4f5" 
>>> [''.join(v) for _, v in groupby(st,key = str.isalpha)] 
['abc', '1,2', 'de', '3.4', 'f', '5'] 
>>> st = "abc12de34f5" 
>>> [''.join(v) for _, v in groupby(st,key = str.isalpha)] 
['abc', '12', 'de', '34', 'f', '5'] 
+0

谢谢@Abhijit,工作正常,但是我需要在unicode文本(cyrilic)上做到这一点,任何想法如何?谢谢 – 2013-02-22 11:02:01

+0

@BoldO:尝试'unicode.isalpha'而不是'str.isalpha'(如果使用Py2.X) – Abhijit 2013-02-22 11:13:52

+0

作品,非常感谢@Abhijit! – 2013-02-22 11:17:36