求表达式匹配 int 类型、float 类型,比如匹配 0、1.0、2,0.0000、123.345, 不匹配时间格式 2018-12-29、版本号 2.3.4。

求表达式匹配 int 类型、float 类型,比如匹配 0、1.0、2,0.0000、123.345, 不匹配时间格式 2018-12-29、版本号 2.3.4。
1 jarry118 OP 目前用的“[0-9]+\.?[0-9]+?$” ,不能匹配 0、1、2 等个位数的 int 类型。 |
2 wersonliu9527 Dec 29, 2018 加个 | 匹配个位数规则? |
3 jinhan13789991 Dec 29, 2018 我就问下,版本号 2.3 你怎么和 float 2.3 区分 /dog |
4 bumz Dec 29, 2018 /^([0-9]*\.)?[0-9]+$/ 把 [0-9]* 换成 [0-9]+ 可以不匹配 .1, .25 这样的浮点数 |
5 yeyu1989 Dec 29, 2018 \d+\.{0,1}\d* |
6 geelaw Dec 29, 2018 如果你不考虑范围、只考虑 C99 的字面量、不考虑类型后缀的话: 整数是 (1-9)(0-9)*|0[xX][0-9A-Fa-f]+|0(0-7)* 第一种是十进制,第二种是十六进制,第三种是八进制。 浮点数是 0[xX]([0-9A-Fa-f]+(\.[0-9a-fA-F]*)?|\.[0-9a-fA-F]+)[pP][+-]?[0-9]+|[0-9]+[eE][+-]?[0-9]+|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)? 第一种是十六进制,第二种是十进制没有小数点,第三种是十进制有小数点。 提示:正负号是一元运算,而不是字面量的一部分。 |
7 jarry118 OP @jinhan13789991 你这么一说,我竟无言以对,幸好我只是做 mysql 监控指标采集,mysql 的版本号不会为 2.3 这种的。 |
8 goreliu Dec 29, 2018 这个不需要用正则表达式,float("xxx") 没异常就匹配了。 |
9 jarry118 OP @wersonliu9527 是个好方法,已经测试可以,但是我想更简单点。 |
10 szq8014 Dec 29, 2018 \d+(\.\d+)? 正经脸,是不是也太简单了……你是不是连去网上搜一下正则的教程的时间也没有…… |
14 Leigg Dec 29, 2018 via iPhone [^-](\d+([\.\d]\d+)[^-] |
17 jinhan13789991 Dec 29, 2018 (?<![\d\.-])(\d+\.?\d*)(?![\d\.-]) 刚刚写的 自测通过~ |
19 jarry118 OP @goreliu 这确实是个好方式,但是有的值是空字符串,如果强行用 float 的话,值就会变成 0.0,但是值对应的指标类型不为数值类型,所以也不能强制转换,除非再加一层类型判断,这样的话,感觉还是正则方便。 |
21 goreliu Dec 29, 2018 @jarry118 >>> float("") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: could not convert string to float: |
22 jinhan13789991 Dec 29, 2018 @jarry118 #12 这个答案是必须数字开头结尾的啊~ |
23 bzw875 Dec 29, 2018 |
28 jarry118 OP @jinhan13789991 是的呢 |
29 geelaw Dec 29, 2018 |
30 xpresslink Dec 29, 2018 不知道楼主是想要学习正则表达式呢,还是要满足需求? 实际上根本用不着正则。 >>> text = "比如匹配 0、1.0、2,0.0000、123.345, 不匹配时间格式 2018-12-29、版本号 2.3.4。" >>> [ ''.join(g) for k,g in itertools.groupby(text, lambda x: x in '0123456789.-:') if k] ['0', '1.0', '2', '0.0000', '123.345', '2018-12-29', '2.3.4'] >>> list(filter(lambda y: ('-' not in y) and (y.count('.') < 2), ['0', '1.0', '2', '0.0000', '123.345', '2018-12-29', '2.3.4'])) ['0', '1.0', '2', '0.0000', '123.345'] >>> |
31 jinhan13789991 Dec 29, 2018  测试下图床,今天很想贴图片,但是没有图床,自己搭建了一个~ |
32 Vegetable Dec 29, 2018 \d+(?:\.\d+)* |