如何在python中检查字符串是否仅包含数字和/?

Hip*_*les 4 python string if-statement

我正在尝试检查一个字符串是否只包含 / 和数字,以用作一种验证形式,但是我找不到同时执行这两项操作的方法。ATM 我有这个:

if Variable.isdigit() == False:
Run Code Online (Sandbox Code Playgroud)

这适用于数字,但我还没有找到一种方法来检查斜线。

bra*_*zzi 8

有很多选项,如此处所示。一个很好的方法是列表理解。

让我们考虑两个字符串,一个满足标准,另一个不满足:

>>> match = "123/456/"
>>> no_match = "123a456/"
Run Code Online (Sandbox Code Playgroud)

我们可以通过使用isdigit()和比较来检查它们中的一个字符是否匹配:

>>> match[0].isdigit() or match[0] == '/'
True
Run Code Online (Sandbox Code Playgroud)

但是我们想知道是否所有字符都匹配。我们可以通过使用列表推导来获得结果列表

>>> [c.isdigit() or c == '/' for c in match]
[True, True, True, True, True, True, True, True]
>>> [c.isdigit() or c == '/' for c in no_match]
[True, True, True, False, True, True, True, True]
Run Code Online (Sandbox Code Playgroud)

请注意,不匹配字符串的列表与字符False的位置相同'a'

由于我们希望所有字符都匹配,我们可以使用all()函数. 它需要一个值列表;如果其中至少有一个是假的,那么它返回假:

>>> all([c.isdigit() or c == '/' for c in match])
True
>>> all([c.isdigit() or c == '/' for c in no_match])
False
Run Code Online (Sandbox Code Playgroud)

奖励积分

放一个功能

你最好把它放在一个函数上:

>>> def digit_or_slash(s):
...     return all([c.isdigit() or c == '/' for c in s])
... 
>>> digit_or_slash(match)
True
>>> digit_or_slash(no_match)
False
Run Code Online (Sandbox Code Playgroud)

生成器表达式

生成器表达式往往更有效:

>>> def digit_or_slash(s):
...     return all(c.isdigit() or c == '/' for c in s)
... 
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,无论如何它可能可以忽略不计。

怎么样in

我更喜欢使用in运算符,如下所示:

>>> def digit_or_slash(s):
...     return all(c in "0123456789/" for c in s)
Run Code Online (Sandbox Code Playgroud)

请注意,这只是选项之一。遗憾的是,您的问题未能通过 Python Zen of Python 推荐( >>> import this):

应该有一种 - 最好只有一种 - 明显的方法来做到这一点。

不过没关系,现在你可以选择你喜欢的任何东西:)