如何判断文本是否包含零?

0 投票
6 回答
2836 浏览
提问于 2025-04-17 09:31

我想检查一段文本里是否包含“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

使用正则表达式的方法可能会更快,所以根据你的工作量和性能目标,值得考虑一下。

撰写回答