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

标签 regex python-3.x regex-lookarounds

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

相关文章:

python-3.x - 如何将打开的文件作为变量传递给多个函数?

.net - 仅完全匹配的正则表达式

regex - 无法使具有负向先行的正则表达式修复 JSON 中的未转义引号

regex - Matlab拆分字符串多个分隔符

regex - 文档.querySelectorAll ('a[id="*"]' );和通配符或正则表达式?

正则表达式-从给定字符串中提取子字符串

regex - 使用 “Matches”的不区分大小写的正则表达式匹配

python-3.x - Dlib安装错误?

python - python REPL 中没有可用的行历史记录/自动完成

JavaScript RegExp 排除特定文件扩展名和index.js