Python 用逗号替换中间数字作为千位分隔符
我有一个这样的字符串:
123456789.123456789-123456789
在小数点和连字符前后可以有任意数量的数字,我需要做的是去掉小数点前面的所有东西,包括小数点本身,同时去掉连字符和连字符后面的所有内容。然后,我需要对中间保留的数字加上千位分隔符的逗号。
所以这里的输出应该是:
123,456,789
我可以使用一些技巧来捕捉中间的数字,但这样就不能替换其他的数字了,而且我不太确定如何用这些技巧来加逗号。
(?<=\.)\d+(?=-)
然后我想到了可以用一个捕获组来实现这个功能,但我不太确定如何插入逗号。
\d+\.(\d+)-\d+
我该如何使用上面提到的正则表达式来插入逗号呢?
2 个回答
4
你在这里请求一个完整的正则表达式,其实把你的字符串分开可能会更简单一些。
>>> import re
>>> s = '123456789.123456789-123456789'
>>> '{:,}'.format(int(re.split('[.-]', s)[1]))
123,456,789
如果你更喜欢使用正则表达式,可以在替换的时候用一个函数调用或者lambda表达式。
>>> import re
>>> s = '123456789.123456789-123456789'
>>> re.sub(r'\d+\.(\d+)-\d+', lambda m: '{:,}'.format(int(m.group(1))), s)
123,456,789
你可以看看不同的格式规范。
4
不要试图用正则表达式来插入千位分隔符;只需找出那个中间的数字,然后用一个函数来生成替换的结果;re.sub()
这个函数可以接受一个函数作为替换的模式:
re.sub(r'\d+\.(\d+)-\d+', lambda m: format(int(m.group(1)), ','), inputtext)
在使用format()
函数时,整数的,
格式可以处理数字的千位分隔符:
>>> import re
>>> inputtext = '123456789.123456789-123456789'
>>> re.sub(r'\d+\.(\d+)-\d+', lambda m: format(int(m.group(1)), ','), inputtext)
'123,456,789'
当然,这种方法在更大的文本中也能正常工作,只要文本中包含了数字、点、数字、破折号、数字的序列。
format()
函数和str.format()
方法关系密切,但它不需要完整的字符串模板(所以不需要{}
占位符或字段名称)。