2010-11-08 114 views
0

我有一部分像這樣的數字:re.findall() - 附加標準

part_number = '18-TX25-37 DMDFC PS' 

當我做

>>> re.findall(r'\w+', part_number) 
... ['18', 'TX25', '37', 'DMDFC', 'PS'] 

部分器件可能爲'18-TX25-37.25 DMDFC PS'這種點和我正則表達式返回'37','25'等。我如何使它不會在點上分裂並返回'37.25'以及所有其他值?

回答

3

\wcharacter class,它是[a-zA-Z0-9_](即:字母,數字和下劃線)的快捷方式。換句話說,您的正則表達式正在搜索一個或多個(字母,數字或下劃線)的所有組。當然,當正則表達式引擎在字符串中看到.時,它不包括它作爲以前匹配的一部分。

如果你想包括.爲有效字符,你需要明確這樣做:

>>> import re 
>>> part_number = '18-TX25-37.25 DMDFC PS' 
>>> re.findall(r"[\w.]+", part_number) 
['18', 'TX25', '37.25', 'DMDFC', 'PS'] 

此說爲「匹配的一個或多個所有組(字母,數字,下劃線或點) 」。

微妙之處:.是正則表達式中的一個特殊字符,匹配任何一個字符。你不需要在這裏轉義它,因爲它在一個字符類(在[]之間),但是如果你在這樣的類之外使用它,你需要在它之前加一個反斜槓。