首页 > 解决方案 > Python re:如何匹配任何数字,即使是逗号和小数点?

问题描述

我想匹配任何可能有小数、逗号或整数的数字。我尝试了以下方法,但如果数字有 > 2 个逗号,我的正则表达式将无法匹配。

谢谢

import re

string1= "6,111,123,999 5,450,900 10.32 OCT21  Dec 31, 2019"

num=re.findall(r'\b\d+[.,]*\d+[,]*d*\b', string1)

Result:

['6,111,123', '999', '5,450,900', '10.32', '31', '2019']

Desired Outcome --> ['6,111,123,999', '5,450,900', '10.32', '31', '2019']

标签: pythonre

解决方案


匹配所有数字

你可以使用\d(?:[\d,.]*\d+)?

string1= "6,111,123,999 5,450,900 10.32 OCT21  Dec 31, 2019 1"

import re
re.findall(r'\d(?:[\d,.]*\d+)?', string1)

输出:['6,111,123,999', '5,450,900', '10.32', '21', '31', '2019', '1']

仅匹配独立单词的数字

使用\b[\d,.]*\d+\b

string1= "6,111,123,999 5,450,900 10.32 OCT21  Dec 31, 2019 1"

import re
re.findall(r'\b[\d,.]*\d+\b', string1)

输出:['6,111,123,999', '5,450,900', '10.32', '31', '2019', '1']

编辑:仅匹配空格、字符串结尾或逗号作为分隔符
string1= "6,111,123,999 5,450,900 10.32 1a2 1-2 OCT21  Dec 31, 2019 1"

import re
re.findall(r'(?:(?<=^)|(?<=\s))[\d,.]*\d+(?=$|\s|,)', string1)

输出:['6,111,123,999', '5,450,900', '10.32', '31', '2019', '1']


推荐阅读