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'
以及所有其他的值呢?
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']
这段代码的意思是“匹配一个或多个(字母、数字、下划线或点)”。
还有一个小细节:在正则表达式中,.
是一个特殊字符,表示可以匹配任何一个字符。在字符类(即在 []
之间)中使用时,你不需要对它进行转义,但如果你在字符类外面使用它,就需要在前面加一个反斜杠。