我有一根这样的绳子:
123456789.123456789-123456789
在小数/连字符前后可以有任意数量的数字,我需要做的是删除小数点之前的所有内容,包括小数点,删除连字符和连字符之后的所有内容。然后,对于中间一组数字(我需要保留),我需要放置一个逗号数千个分隔符。
因此,这里的输出应该是:
123,456,789
我可以用“旁观者”来捕捉中间的数字,但是它不会取代其他数字,我不知道如何使用“旁观者”来放置逗号。
(?<=\.)\d+(?=-)
然后我想我可以用这样的捕获组来工作,但不确定如何插入逗号
\d+\.(\d+)-\d+
如何使用上述正则表达式之一插入逗号?
发布于 2014-07-20 00:35:08
不要试图用正则表达式插入数千个分隔符;只需选择这个中间数字并使用一个函数来生成替换;re.sub()
接受一个函数作为替换模式:
re.sub(r'\d+\.(\d+)-\d+', lambda m: format(int(m.group(1)), ','), inputtext)
当在,
中使用整数时,函数格式会将一个数字格式化为一个带有数千个分隔符的数字:
>>> import re
>>> inputtext = '123456789.123456789-123456789'
>>> re.sub(r'\d+\.(\d+)-\d+', lambda m: format(int(m.group(1)), ','), inputtext)
'123,456,789'
当然,这仍然可以在包含数字、点、数字、破折号、数字序列的较大文本中工作。
format()
函数与方法密切相关,但不需要完整的字符串模板(因此不需要{}
占位符或字段名)。
https://stackoverflow.com/questions/24846257
复制相似问题