如何用python写一个正则表达式,匹配每3位就有一个逗号的数字(千分号)?

阅读: 评论:0

如何⽤python写⼀个正则表达式,匹配每3位就有⼀个逗号的数字(千分号)?
这个是《Python编程快速上⼿ 让繁琐⼯作⾃动化》正则表达式这⼀章的习题
下午摸索了半天,本⾝对正则不是特别了解,之前接触过⼀些,近⼏天学习python,⼜开始倒腾了
下⾯是我⾃⼰下午写的,请⼤家指导下
import re
threeNumRegex = repile(r'''
(?:(?<![\d|\,])\d{1,3}(?=\s)) #匹配只有1-3位数,左边
|
恨妻(?<![\d|\,])(?:\d{1,3})(?:\,\d{3})+(?=\s) #匹配带有","的情况
''', re.VERBOSE)我们生活的时代
text = '''
12
12,333
12,12
4444
234,45,234
873,238,23,222
分子量测定837,228,112
2211,341,394,222
'''弥撒音乐
过氧化氢浓度
result = threeNumRegex.findall(text)
print(result)
为什么是
(?:(?<![\d|\,])\d{1,3}(?=\s))|(?<![\d|\,])(?:\d{1,3})(?:\,\d{3})+(?=\s)
其中
(?<![\d|\,])\d{1,3}(?=\s))
是⽤来匹配只有1-3位数的情况,前⾯不能是数字或者",",如果没有前⾯的否定负向零宽断⾔
(?<![\d|\,])
就会出现下⾯这样的匹配情况
股市女神
['12', '333', '12', '444', '234', '222', '112', '222']
得不到正确的结果
另外,还需要加⼀个肯定正向零宽断⾔
(?=\s)
如果不加,结果会是这样
['12', '12', '12', '444', '234', '873', '837', '221']
也不正确
(?<![\d|\,])(?:\d{1,3})(?:\,\d{3})+(?=\s)
这⼀部分是匹配带有“,”的情况,就不详细说了
就是不知道还有没有其他更简便的⽅式?
有的话,帮忙留⾔给我,请⼤家多多赐教

本文发布于:2023-07-04 22:59:50,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/170521.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:匹配   开始   了解   没有   情况   带有   数字   否定
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图