2010-11-08 116 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'] 

此说为“匹配的一个或多个所有组(字母,数字,下划线或点) ”。

微妙之处:.是正则表达式中的一个特殊字符,匹配任何一个字符。你不需要在这里转义它,因为它在一个字符类(在[]之间),但是如果你在这样的类之外使用它,你需要在它之前加一个反斜杠。