re.findall() - 其他标准

时间:2010-11-08 21:41:21

标签: python regex

我有一个这样的部件号:

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'等。我怎样才能使其不在点处分割并返回{{1和所有其他值一起?

1 个答案:

答案 0 :(得分: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']

这表示“匹配一个或多个(字母,数字,下划线或点)的所有组”。

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