我正在使用 python 和 regexp,需要将所有千位分隔符 (,.) 替换为空字符串 (''),并且只允许逗号 (,) 作为小数分隔符或没有小数。所以 - - 1,500.55 -> 1500,55 - 1.500.55 -> 1500,55 - 1500.55 -> 1500,55 - 1,500 -> 1500 - 1 500 -> 1500它也可能是字符串中的一些字母,也应该用空字符串替换 -支付 1,500.55 -> 1500,55我有这样的代码,但该代码会错误地接受逗号作为千位分隔符,并且不会将点替换为逗号作为小数分隔符 -cleaned = re.sub(r"[^\d,]+", '', clean_str)这是关于钱的,所以你可以假设如果有小数(分),可能会有两位小数。
1 回答
![?](http://img1.sycdn.imooc.com/545845b40001de9902200220-100-100.jpg)
慕莱坞森
TA贡献1810条经验 获得超4个赞
您可以使用此sub + replace代码:
>>> import re
>>> reg = re.compile(r'[,.]+(?!\d{2}$)|[^\d.,]+')
>>> arr = ['1,500.55', '1.500.55', '1500.55', '1,500', '1 500', '1,500,55']
>>> for i in arr:
... print ( reg.sub('', i).replace('.', ',') )
...
1500,55
1500,55
1500,55
1500
1500
1500,55
细节:
[,.]+(?!\d{2}$)
: 如果结束前没有 2 位数字,则匹配逗号或点|
: 或者[^\d.,]+
:匹配 1 个或多个非数字、点和逗号的任意字符''
: 替换为空字符串replace('.', ',')
: 用逗号替换最后一个点
添加回答
举报
0/150
提交
取消