不完全小数的python正则表达式

2024-09-29 00:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数字串,可能有不完整的十进制转述

例如

a = '1. 1,00,000.00  1 .99 1,000,000.999'

期望输出

['1','1,00,000.00','1','.99','1,000,000.999']

到目前为止,我已经尝试了以下两个

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

这给了

['1', '1,00,000.00', '1', '99', '1,000,000.999']

这使得0.99到99这是不需要的

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

给予

['1', '', '', '1,00,000.00', '', '', '1', '', '.99', '', '1,000,000.999', '']

这也会产生不需要的空字符串结果

这用于在字符串中查找货币值,以便逗号分隔符没有设置的模式或根本不存在


Tags: 字符串re货币模式逗号分隔符数字串findall
3条回答

我的建议是使用下面的正则表达式:

我已经用python实现了一个代码片段。你知道吗

import re

a = '1. 1,00,000.00  1 .99 1,000,000.999'

result = re.split('/\.?\d\.?\,?/', a)

print result

输出:

['1','1,00000.00','1','0.99','1000000.999']

此正则表达式将为您提供所需的输出:

([0-9]+(?=\.))|([0-9,]+\.[0-9]+)|([0-9]+)|(\.[0-9]+)

你可以在这里测试:https://regex101.com/r/VfQIJC/6

您可以使用re.split

import re
a = '1. 1,00,000.00  1 .99 1,000,000.999'
d = re.split('(?<=\d)\.\s+|(?<=\d)\s+', a)

输出:

['1', '1,00,000.00', '1', '.99', '1,000,000.999']

相关问题 更多 >