2013-02-13 38 views
1

我有一個字符串,如下面的一個:分割字符串(2.7)

26 (passengers:22 crew:4) 

32 (passengers:? crew: ?) 

。我想要做的是分解代碼,以便只提取代表乘客和機組人數的數字。如果這是一個問號,我會尋找它被替換爲「」。

我知道我可以使用string.replace(「?」,「」)來替換?然而,我怎麼去分別提取船員或乘客的數字字符呢?數字可能從兩位數到三位不等,因此我無法從字符串或特定時間間隔刪除最後幾個字符。

在此先感謝

+1

*數字可能會從兩位數到三位*與您的示例相矛盾;我在那裏看到一個*一位數字('4')。我的答案假定1位數字也是好的。 – 2013-02-13 15:03:40

+0

@MartijnPieters謝謝Martijn。給出的例子只有數百個字符串中的兩個。例如,可能有一個「機組人員:135」的條目。 – thefragileomen 2013-02-13 15:42:33

+0

是的,那是3位數字。 '4'是*一個*數字,但是你繼續說這些數字從兩個到三個數字不等,這意味着'4'不是一個有效的數字。 – 2013-02-13 15:43:58

回答

5

正則表達式匹配將是:

r'\(\s*passengers:\s*(\d{1,3}|\?)\s+ crew:\s*(\d{1,3}|\?)\s*\)' 

在拋出一些額外的空格寬容

結果:

>>> import re 
>>> numbers = re.compile(r'\(\s*passengers:\s*(\d{1,3}|\?)\s+ crew:\s*(\d{1,3}|\?)\s*\)') 
>>> numbers.search('26 (passengers:22 crew:4)').groups() 
('22', '4') 
>>> numbers.search('32 (passengers:? crew: ?)').groups() 
('?', '?') 
+0

感謝您的幫助。讚賞。 – thefragileomen 2013-02-13 15:51:57