我正在使用 python 和 regexp,需要將所有千位分隔符 (,.) 替換為空字符串 (''),并且只允許逗號(hào) (,) 作為小數(shù)分隔符或沒有小數(shù)。所以 - - 1,500.55 -> 1500,55 - 1.500.55 -> 1500,55 - 1500.55 -> 1500,55 - 1,500 -> 1500 - 1 500 -> 1500它也可能是字符串中的一些字母,也應(yīng)該用空字符串替換 -支付 1,500.55 -> 1500,55我有這樣的代碼,但該代碼會(huì)錯(cuò)誤地接受逗號(hào)作為千位分隔符,并且不會(huì)將點(diǎn)替換為逗號(hào)作為小數(shù)分隔符 -cleaned = re.sub(r"[^\d,]+", '', clean_str)這是關(guān)于錢的,所以你可以假設(shè)如果有小數(shù)(分),可能會(huì)有兩位小數(shù)。
1 回答

慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以使用此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
細(xì)節(jié):
[,.]+(?!\d{2}$)
: 如果結(jié)束前沒有 2 位數(shù)字,則匹配逗號(hào)或點(diǎn)|
: 或者[^\d.,]+
:匹配 1 個(gè)或多個(gè)非數(shù)字、點(diǎn)和逗號(hào)的任意字符''
: 替換為空字符串replace('.', ',')
: 用逗號(hào)替換最后一個(gè)點(diǎn)
添加回答
舉報(bào)
0/150
提交
取消