2015-11-04 137 views
1

我有*字母和(負數)字符串,並且希望將它們與python分隔成一個數組。將字符串拆分爲字母和數字

pathD = "M30,50.1c0,0,25,100,42,75s10.3-63.2,36.1-44.5s33.5,48.9,33.5,48.9l24.5-26.3" 

splitS = re.split('(\d+)',pathD) 

這不起作用,因爲它分裂的一個內襯亂點和破折號:

['M', '30', ',', '50', '.', '1', 'c', '0', ',', '0', ',', '25', ',', '100', ',', '42', ',', '75', 's', '10', '.', '3', '-', '63', '.', '2', ',', '36', '.', '1', '-', '44', '.', '5', 's', '33', '.', '5', ',', '48', '.', '9', ',', '33', '.', '5', ',', '48', '.', '9', 'l', '24', '.', '5', '-', '26', '.', '3', ''] 

我希望看到這樣的事情:

[M, 30, 50.1, c, 0, 0, 25, 100, 42, 75, s, 10.3, -63.2, 36.1, -44.5, s, 33.5, 48.9, 33.5, 48.9, l, 24.5, -26.3] 

我不是當然,如果我與這​​個人在正確的道路上或應該採取不同的方式。

+2

如果那是SVG路徑,也有蟒蛇,我會用這個工具,SVG ... – reptilicus

+1

'pathD'是一個字符串,然後(所以價值應該用引號括起來是有效的Python語法)?你說它是一個列表,但像它是一個字符串一樣對它執行一個正則表達式。 – krock

回答

2
import re 

pathD = "M30,50.1c0,0,25,100,42,75s10.3-63.2,36.1-44.5s33.5,48.9,33.5,48.9l24.5-26.3" 

print(re.findall(r'[A-Za-z]|-?\d+\.\d+|\d+',pathD)) 

['M', '30', '50.1', 'c', '0', '0', '25', '100', '42', '75', 's', '10.3', '-63.2', '36.1', '-44.5', 's', '33.5', '48.9', '33.5', '48.9', 'l', '24.5', '-26.3'] 
+0

謝謝!這幾乎是我想要的,但它是如何超越「c」和「s」之間的一切? – Blikpils

+0

@Blikpils修復。立即更新 – LetzerWille

+0

完美!非常感謝你的魅力:D – Blikpils