2013-02-22 37 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