2012-12-20 126 views
1

假設您有一個字符串(例如聖誕禮物列表)。re.findall - 從逗號分隔的字符串獲取項目列表

presents = 'iPods, Windows 8, .hack//Sign boxset , red shoes , Wall-E DVD, Deus Ex: Human Revolution  ' 

逗號分隔的項目都是任意的,可以包含數字,標點符號或特殊字符(逗號除外)。我想用Python獲取這些項目的數組。

presents_arr = ['iPods', 'Windows 8', '.hack//Sign boxset', 'red shoes', 'Wall-E DVD', 'Deus Ex: Human Revolution'] 

我通常會用逗號分隔符來分割字符串,然後用split來清理每個字符串。

presents = presents.split(',') 
presents = [present.strip() for present in presents] 

的我們的好奇心,我能和re.findall做專?我需要與split/strip相同的行爲。

回答

2

直接翻譯會是這樣的:

presents = [x.strip() for x in re.findall(r'[^,]*', presents) if x] 

的改善將分裂在空白包圍逗號:

presents = re.split(r'\s*,\s*', presents) 

請不要做其中任一在這種情況下。根本沒有辦法提高清晰度:

presents = presents.split(',') 

並在這種情況下的表現會比簡單的分裂還差。

0

您可以搜索[^,]*,它將相當於您的拆分,。然而,更好的方法是將\s*,\s*分開 - 這樣你就不需要strip部分了,這不是findall可以輕鬆做到的事情。 (其實,我認爲你不能做它在所有,由於對可變長度負回顧後要求)。

0
re.findall(r'[^,\s]+', presents)