【发布时间】:2014-03-08 22:21:58
【问题描述】:
我只需要过滤掉只包含数字和/或一组固定标点符号的字符串。
我尝试检查每个字符,然后对布尔条件求和以检查它是否等于len(str)。有没有更pythonic的方式来做到这一点:
>>> import string
>>> x = ['12,523', '3.46', "this is not", "foo bar 42", "23fa"]
>>> [i for i in x if [True if j.isdigit() else False for j in i] ]
['12,523', '3.46', 'this is not', 'foo bar 42']
>>> [i for i in x if sum([True if j.isdigit() or j in string.punctuation else False for j in i]) == len(i)]
['12,523', '3.46']
【问题讨论】:
-
你确定你不是真的的意思是“我需要找到可以表示数字的字符串,但是
float等不起作用,因为我也想允许逗号作为千位分隔符”? -
是的,我稍后会需要它,但两层过滤也会捕获法律文档中的数字索引(例如
x = ["chapter", "1.2.3.5"])
标签: python string digit punctuation