我有一个这样的部件号:
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和所有其他值一起?
答案 0 :(得分:3)
\w
是character 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']
这表示“匹配一个或多个(字母,数字,下划线或点)的所有组”。
一个微妙之处:.
是正则表达式中的一个特殊字符,匹配任何一个字符。你不需要在这里转义它,因为它在一个字符类中(在[]
之间)但是如果你要在这样一个类之外使用它,你需要在它前面加一个反斜杠。