regex - 使用正则表达式从右到左将数字分成三组

我有一个字符串“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

https://stackoverflow.com/questions/45950494/

相关文章:

r - 如何将日期格式从 YYYY/MM/DD 更改为 DD/MM/YYYY

pandas - 通过在 Pandas 中调用袖扣来改变身材大小

macos - `open -a Chrome` 返回 `Unable to find applic

nginx - 来自 nginx 的 422 状态代码的响应缺少 'Access-Control-A

r - 使用 ggplot 的条形图重新排序无法正常工作

python - 如何将 '?' 转换为 NaN

python - 是否可以通过 Python 中的另一个字符串列表过滤子字符串列表?

vue.js - router-link 替换为 vue-router?

php - Laravel - 如何每分钟运行一个函数/ Controller ? (任务调度)

regex - Nginx 正则表达式和位置通配符