我有一个像
这样的文字 "Euro Style = $12,345,67, US Style = $12,345,67, $1,234"
我希望将字符串替换为
输出:
Euro Style = $12,345.67, US Style = $12,345.67, $1,234
即。只要有货币,当货币最后有2位数时,用逗号替换逗号。
我尝试使用正则表达式,但不知怎的,我错过了什么,请你帮忙。
add = "Euro Style = $12,345,67, US Style = $12,345,67, $1,234"
print(re.sub(r'([,][0-9]{2,}\B)+','.\2',add))
我的输出结果不正确
Euro Style = $12.5,67, US Style = $12.5,67, $1.4
答案 0 :(得分:1)
您可以使用
re.sub(r'(?<=\d),(?=\d{1,2}(?!\d))', r'.', s)
请参阅regex demo。
<强>详情
(?<=\d)
- 数字必须在...之前。,
- 应该跟随的逗号...... (?=\d{1,2}(?!\d))
- 1位或2位数字(\d{1,2}
)未跟随其他数字((?!\d)
)。import re
s="Euro Style = $12,345,67, US Style = $12,345,67, $1,234, $12,124,345,456 $0,89 $12,345,678"
print(re.sub(r'(?<=\d),(?=\d{1,2}(?!\d))', '.', s))
# => Euro Style = $12,345.67, US Style = $12,345.67, $1,234, $12,124,345,456 $0.89 $12,345,678
请注意,如果您的号码从未粘贴到_
或字母,您也可以使用更简单的正则表达式和字边界:
(?<=\d),(?=\d{1,2}\b)
^^
请参阅this regex demo。
或者甚至 - 如果您不关心,
之前是否有数字:
re.sub(r',(\d{1,2})\b', r'\1', s)
请参阅this regex demo。
最后,如果您还需要将$12,212,12345678
更改为$12,212.12345678
re.sub(r',(\d{1,2}|\d{4,})\b', r'.\1', s)
(\d{1,2}|\d{4,})
是一个匹配1位或2位或4位以上的替换组,从而消除了3个数字块,后跟字边界。
答案 1 :(得分:1)
尝试
re.sub(r',(\d{2}\D)', r'.\1', add)
{2,}
表示2个或更多数字。如果您想要完全匹配2,则需要提供{2}
。使用\ D只是为了匹配除数字之外的任何其他内容。希望这可以帮助! -