String使用specfic字符串替换所有美元金额

时间:2017-12-17 01:34:16

标签: python regex replace dollar-sign

我需要在python中用字符串中的“”标签替换美元金额。这是我到目前为止所想到的:

这是我的字符串:

s = 'Accounts and current portion of notes receivable, net of allowances of $2,199 and $2,506 at July 2, 2011 and October 2, 2010, respectively'

使用这个正则表达式,我可以正确找到所有美元金额。

re.findall(r"[\$]{1}[\d,]+\.?\d{0,2}",s)

给了我:

['$2,199', '$2,506']

但是,我想在原始字符串中用“”替换美元金额。我怎么做?

预期产出:

'Accounts and current portion of notes receivable, net of allowances of <amount> and <amount> at July 2, 2011 and October 2, 2010, respectively'

2 个答案:

答案 0 :(得分:0)

也许

re.sub(r"[\$]{1}[\d,]+\.?\d{0,2}","<amount>",s)

会做你需要的......顺便说一句,如果你只需要一个你没有指定{1},因为这是默认行为

答案 1 :(得分:0)

您可以使用以下方式进行替换:

s1 = re.sub("\$([\d,]+\.?\d{0,2})", '<amount>', s)
#              ^                ^

s1 = re.sub("\$([\d,]+(?:\.\d{2})?)", '<amount>', s)
#              ^      %         % ^
#  in between '^' matches the entire dollar amount
#  in between '%' matches the decimal part

可能会更好。

括号内的部分是匹配部分,用替换字符串替换。找到美元符号后,我们会抓住以下所有数字和逗号。因此,用插入符号标记的括号之间的内容是被替换的匹配部分。对小数处理部分略有调整。使用您的代码,您可以只匹配'。'或'.5'。上面的版本确保捕获小数点后跟两位数。另请注意,此十进制捕获位于非捕获括号内。但这没关系,因为非捕获括号仍然在捕获括号内。有关详细信息,请参阅https://docs.python.org/3/library/re.html