我有一个字符串“1234567890”,我想将其分成三组,从右到左开始,最左边的组从一位到三位不等(取决于剩下多少位)
本质上,这与向长数字添加逗号的过程相同,除了,我还想提取最后三位数字。
我尝试使用环视但无法找到获得最后三个的方法 数字。
string = '1234567890'
re.compile(r'\d{1,3}(?=(?:\d{3})+$)')
re.findall(pattern, string)
['1', '234', '567']
预期输出是(我不需要逗号):
['1', '234', '567', 789]
最佳答案
意识到如果我们从右到左添加逗号,对于每组三个完整的数字,那么我们可以简单地做一个正则表达式用这三个数字后跟一个逗号替换所有三个数字。在下面的代码片段中,我反转数字字符串,执行逗号运算,然后再次反转以达到我们想要的输出。
string = '1234567890'
string = re.sub(r'(?=\d{4})(\d{3})', r'\1,', string[::-1])[::-1]
print string.split(',')
string = '123456789'
string = re.sub(r'(?=\d{4})(\d{3})', r'\1,', string[::-1])[::-1]
print string.split(',')
输出:
['1', '234', '567', '890']
['123', '456', '789']
用于替换的正则表达式的一部分可能需要进一步解释。我在模式的开头添加了一个积极的前瞻 (?=\d{4})
。这是为了确保我们不会在最后一组三位数后添加逗号,如果发生这种情况的话。
此处演示:
Rextester
关于regex - 使用正则表达式从右到左将数字分成三组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45950494/