re.findall() - 附加条件

0 投票
1 回答
2231 浏览
提问于 2025-04-16 06:45

我有一个这样的零件编号:

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' 以及所有其他的值呢?

1 个回答

3

\w 是一个 字符类,它是 [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']

这段代码的意思是“匹配一个或多个(字母、数字、下划线或点)”。

还有一个小细节:在正则表达式中,. 是一个特殊字符,表示可以匹配任何一个字符。在字符类(即在 [] 之间)中使用时,你不需要对它进行转义,但如果你在字符类外面使用它,就需要在前面加一个反斜杠。

撰写回答