以python正则一行代码实现对整数(不带小数点)或小数点后存在任意位数的数进行千分位分隔,小数点后不加分隔符

a = “20010320.888888888”

r=re.sub(”(?<=[0-9])(?=([0-9]{3})+(?![0-9]))“, “,” ,a) #小数位数一多就不行了
20,010,320.888,888,888
注意:不要采用字符串format格式化,权当re思维练习;
一行实现对不带小数点的整数也适用

修改如下,对于整数以及带有小数点的数测试正确,如有帮助,希望采纳一下

import re
a = "20010326807.25858"
r = re.sub("(?!^)(?=(\d{3})+(\.))", "," ,a) if '.' in a else re.sub("(?!^)(?=(\d{3})+($))", "," ,a)
print(r)

加个限制(\.)表示符号是 . 则结束匹配,然后因为当没有小数点时,正则也会无法匹配,而如果要以$取匹配整数,小数的情况又无法匹配。
所以,搞了很久,发现这个只能分情况区使用正则表达式。要写成一行也可以。

如有帮助,希望采纳一下

r=re.sub(r"(?<=[0-9])(?=([0-9]{3})+(?![0-9]))", ",",a[0:a.index(".")] if "." in a else a) + (a[a.index("."):] if "." in a else "")
这种要不要

img

python实现代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author: Roc-xb
"""

import re

if __name__ == '__main__':
    a = "20010326807.25858"
    r = re.sub("(?!^)(?=(\d{3})+(\.))", ",", a) if '.' in a else re.sub("(?!^)(?=(\d{3})+($))", ",", a)
    print(r)

js实现代码

let r='20010326807.25858'.replace(/(?<!.*\..*)(\d)(?=(\d{3})+($|\.))/g, '$1,');
console.log(r);

img

print(re.sub('(?<=[0-9])(?=([0-9]{3})+(?![0-9]))', ',' ,str(20010320.888888888)))

还原
[0-9](?=(?:[0-9]{3})+(?![0-9]))
千分
(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))

正则表达式可以现实。

检查一下你的正则是不是哪里出错了,可以看看一下长子县生成正则表达式的直接用

有一种正则表达式在菜鸟教程的正则表达式测试网站 https://c.runoob.com/front-end/854/ 是通过的:
(?<=^[0-9]+)(?=([0-9]{3})+(?![0-9]))
然而在python里是报错的,查了一下是因为python里面?<=这种表达必须要明确字符串的长度(也就是不能有+),我还在继续尝试中