正则表达式匹配数值类型字符串

2018-12-29 08:44:28 +08:00
 jarry118

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

2706 次点击
所在节点    Python
32 条回复
goreliu
2018-12-29 09:29:02 +08:00
@jarry118

>>> float("")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float:
jinhan13789991
2018-12-29 09:41:41 +08:00
@jarry118 #12 这个答案是必须数字开头结尾的啊~
bzw875
2018-12-29 09:50:51 +08:00
jarry118
2018-12-29 10:42:34 +08:00
@yeyu1989 时间格式我没描述清楚,应该是 2018-12-28 15:58:48 这种。
jarry118
2018-12-29 10:43:47 +08:00
@szq8014 刚回复被限制,当然知道原因啊🤣
jarry118
2018-12-29 10:44:39 +08:00
@goreliu 那您这个方案是行的通的,我大意了。
jarry118
2018-12-29 10:45:10 +08:00
@bzw875 感谢!🎉🎉🎉
jarry118
2018-12-29 10:45:34 +08:00
@jinhan13789991 是的呢
geelaw
2018-12-29 11:02:29 +08:00
@jarry118 #13 你可以用断言排除所有的日期的情况,或者你可以先删除所有的日期、版本号。

你的提问非常模糊,因此大家只能靠 psychic helping.
xpresslink
2018-12-29 14:46:38 +08:00
不知道楼主是想要学习正则表达式呢,还是要满足需求?
实际上根本用不着正则。

>>> 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']
>>>
jinhan13789991
2018-12-29 17:24:39 +08:00
![cmd-markdown-logo]( http://35.220.239.255:8080/uploads/big/47fa4fd2e562a111acd32f512487e3e4.png)

测试下图床,今天很想贴图片,但是没有图床,自己搭建了一个~
Vegetable
2018-12-29 17:28:10 +08:00
\d+(?:\.\d+)*

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/522125

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX