2010-11-18 16 views
0

我想分割一個字符串到Python中的列表,取決於數字/非數字。 例如,如何分割字符串(使用正則表達式?)取決於數字/而不是數字

5 55+6+ 5/ 

應該返回

['5','55','+','6','+','5','/'] 

我在其中循環遍歷字符串中的字符,並使用re.match(「\ d」)或測試他們的那一刻一些代碼( 「\ d」)。我想知道是否有更好的方法來做到這一點。

PS:一定要使用Python 2.4

+0

符號化,我認爲? – delnan 2010-11-18 19:09:21

+0

是的,差不多。這是一個反向波蘭記號計算器,所以我不能假設角色之間總是有一個空格(不知道有什麼我想做的名字,直到現在,但感謝告訴我)。 – rikkit 2010-11-19 04:18:00

回答

5

假設需要+和5間6進行匹配(你缺少哪個)兼容,

>>> import re 
>>> s = '5 55+6+ 5/' 
>>> re.findall(r'\d+|[^\d\s]+', s) 
['5', '55', '+', '6', '+', '5', '/'] 
+1

偉大的模式,但它似乎也可以使用findall。你也不需要模式中的尾部'\ s *',但它也不會傷害。 +1 – 2010-11-18 19:12:58

+0

@Justin:對。更新。 – kennytm 2010-11-18 19:14:12

+0

謝謝! re.findall正是我所期待的。最後使用「[] + | \ d + |^\ d」(需要連續多個數字,但非數字分開)。 – rikkit 2010-11-19 04:08:09

0

如果順序並不重要,你可以做2拆分:

re.split('\D+', mystring) 

re.split('\d+', mystring) 

但是,從您的輸入,它看起來可能是數學...在這種情況下,順序會很重要。 :)

您最好使用re.findall,如在其他答案之一。

+0

是的,它是一個反向波蘭符號計算器 - 訂單絕對重要! – rikkit 2010-11-19 04:15:29

2

這是一個最簡單的一個:)

re.findall('\d+|[^\d]+','134aaaaa') 
+0

它不吃空間,嘗試它的示例輸入... – 2010-11-18 19:19:59

1

使用findallfinditer

>>> re.findall(r'\d+|[^\s\d]+', '5 55+6+ 5/') 
['5', '55', '+', '6', '+', '5', '/'] 
相關問題