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 "")
这种要不要
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);
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里面?<=这种表达必须要明确字符串的长度(也就是不能有+),我还在继续尝试中