如何判断文本是否包含零?
我想检查一段文本里是否包含“0”。
我不能用 string.__contains(" 0")
这个方法,因为这样写代码不好,或者即使可以用,我也没有足够的理由去告诉我的上级这是唯一的方法。你能给我一些建议吗?
我们找到的另一种方法是从每一行提取数据,找出数字,把它转换成整数,然后检查这个值是否大于0。但这样做有点耗时间。
这段文本可能包含像2560这样的数字,而在这次搜索中我们希望忽略它。
请给我一些其他的建议。我不想进行整数转换。
例如:
abc : 1234
def : 1230 >>> This kind of text should return False
abc : 1234
def : 0 >>>> This kind of text should return True, as it contains 0.
6 个回答
0
如果你想要的只是“0”,那么:
string == '0'
如果周围可能有空格的话:
string.strip() == '0'
2
使用正则表达式来查找某种模式:
>>> import re
>>> re.findall('\W(0)\W', 'alsdkjf 0 asdkfs0asdf 0 ')
['0', '0']
这里的 \W(0)\W
表示数字零被非字母数字字符(也就是不是字母和数字的字符)包围。
你的例子:
>>> re.findall('\W(0)\W', 'abc : 1234 def : 1230 ')
[]
>>> re.findall('\W(0)\W', 'abc : 1234 def : 0 ')
['0']
3
一开始,我以为你可以直接用 in
来解决问题:
if "0" in myString:
print "%s contains 0" % myString
不过,重新看了你的问题后,发现这似乎不是你想要的效果。这个方法会在像下面这样的行中找到 0
:
abc: 200
我想你并不想这样做。你需要用一些更复杂的方法。我可能会选择一些简单的手动代码,而不是像其他答案中提到的那样使用正则表达式。下面是具体做法:
def is_row_zero(row):
parts = row.split(":")
value = parts[1].strip()
if value == "0":
print "%s is 0, not allowed" % parts[0]
return True
return False
使用正则表达式的方法可能会更快,所以根据你的工作量和性能目标,值得考虑一下。