鱼C论坛

 找回密码
 立即注册
查看: 3574|回复: 6

[已解决]正则表达式匹配正整数

[复制链接]
发表于 2017-7-15 17:33:14 | 显示全部楼层 |阅读模式
0鱼币
本帖最后由 什么鬼… 于 2017-7-15 18:22 编辑

一开始我是这么写的
  1. >>> re.findall(r"\d+",'123')
  2. ['123']
复制代码

但是面临问题就是
  1. >>> re.findall(r'\d+','123.321')
  2. ['123', '321']
复制代码

这样不行(楼主强迫症)
于是尝试修改
  1. >>> re.findall(r'\A\d+\Z','1231244.323123')
  2. []
复制代码

但是又面临问题
  1. >>> re.findall(r'\A\d+\Z','the int is 123,and float is 1.3213')
  2. []
复制代码

无法匹配出中间的数字
考虑数字前面和后面都不能有小数点,所以再尝试
  1. >>> re.findall(r"(?<!\.)\d+(?!\.)",'the int is 123,and float is 789.987')
  2. ['123', '78', '87']
复制代码

然后问题又来了,因为前面不能是小数点,所以python直接丢掉了一个数字和一个小数点,所以楼主又进行更改
  1. >>> re.findall(r'(?<!\.\d*)\d+(?!\d*\.)','the int is 123,and float is 789.987')
  2. Traceback (most recent call last):
  3.   File "<pyshell#57>", line 1, in <module>
  4.     re.findall(r'(?<!\.\d*)\d+(?!\d*\.)','the int is 123,and float is 789.987')
  5.   File "D:\python3\lib\re.py", line 222, in findall
  6.     return _compile(pattern, flags).findall(string)
  7.   File "D:\python3\lib\re.py", line 301, in _compile
  8.     p = sre_compile.compile(pattern, flags)
  9.   File "D:\python3\lib\sre_compile.py", line 566, in compile
  10.     code = _code(p, flags)
  11.   File "D:\python3\lib\sre_compile.py", line 551, in _code
  12.     _compile(code, p.data, flags)
  13.   File "D:\python3\lib\sre_compile.py", line 160, in _compile
  14.     raise error("look-behind requires fixed-width pattern")
  15. sre_constants.error: look-behind requires fixed-width pattern
复制代码

这次比较惨,因为反向否定界定必须定宽,所以直接报错了。。。。
到这里楼主就没办法了.....估计哪个地方没想到....来求助一波,希望小伙伴们开开脑洞解决一波......

后期声明....the int is 123,and float is 789.987只是楼主的一个例子,想要匹配到前面的123,而不能匹配到后面的所有数据
最佳答案
2017-7-15 17:33:15
什么鬼… 发表于 2017-7-15 18:21
我是想要匹配正整数,但浮点数不会被计在里面,而且浮点数的正数和小数也不会被匹配到
  1. >>> re.findall(r'(?<![.\d])\d+(?![.\d])',ss)
  2. ['123']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-15 17:33:15 | 显示全部楼层    本楼为最佳答案   
什么鬼… 发表于 2017-7-15 18:21
我是想要匹配正整数,但浮点数不会被计在里面,而且浮点数的正数和小数也不会被匹配到
  1. >>> re.findall(r'(?<![.\d])\d+(?![.\d])',ss)
  2. ['123']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-15 17:57:21 | 显示全部楼层
[1-9]\d*
其实楼主可以百度搜下正则生成,有惊喜
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-15 18:07:08 | 显示全部楼层
  1. >>> ss='the int is 123,and float is 1.3213'
  2. >>> import re
  3. >>> re.findall(r'\d+(?:\.\d+)?',ss)
  4. ['123', '1.3213']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-15 18:21:39 | 显示全部楼层

我是想要匹配正整数,但浮点数不会被计在里面,而且浮点数的正数和小数也不会被匹配到
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-15 18:32:18 | 显示全部楼层
当时就吓傻了 发表于 2017-7-15 17:57
[1-9]\d*
其实楼主可以百度搜下正则生成,有惊喜

你这个不行的啊....会匹配到浮点数的整数和小数部分,楼主强迫症,想要完美匹配......
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-15 18:52:14 | 显示全部楼层
什么鬼… 发表于 2017-7-15 18:32
你这个不行的啊....会匹配到浮点数的整数和小数部分,楼主强迫症,想要完美匹配......

闹笑话了,我测试的时候用用是search方法,想了下,貌似做不到楼主的这个要求
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-28 17:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表