我正在尝试检查字符串是否只包含/和数字,以用作验证形式,但是我找不到并且两种方式都可以。 ATM我有这个:
if Variable.isdigit() == False:
这适用于数字,但我还没有找到检查斜杠的方法。
答案 0 :(得分:4)
您可以使用以下正则表达式。
import re
matched = re.match(r'^-?[0-9/]+$', '01/02/2016')
if matched:
print 'Matched integers with slashes'
答案 1 :(得分:3)
有许多选项,如此处所示。一个不错的是列表推导。
让我们考虑两个字符串,一个满足标准,另一个不满足:
>>> match = "123/456/"
>>> no_match = "123a456/"
我们可以使用isdigit()
和比较:
>>> match[0].isdigit() or match[0] == '/'
True
但我们想知道所有字符是否匹配。我们可以使用list comprehensions:
获取结果列表>>> [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]
请注意,不匹配字符串的列表在False
字符的相同位置有'a'
。
由于我们希望所有字符匹配,我们可以使用all()
function。它需要一个值列表;如果其中至少有一个为假,则返回false:
>>> all([c.isdigit() or c == '/' for c in match])
True
>>> all([c.isdigit() or c == '/' for c in no_match])
False
最好将它放在一个函数上:
>>> 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
Generator expressions往往效率更高:
>>> def digit_or_slash(s):
... return all(c.isdigit() or c == '/' for c in s)
...
但在你的情况下,它无论如何都可以忽略不计。
in
怎么样?我更愿意使用in
运算符,如下所示:
>>> def digit_or_slash(s):
... return all(c in "0123456789/" for c in s)
请注意,这只是其中一个选项。遗憾的是,Zen of Python recommendation(>>> import this
):
应该有一种 - 最好只有一种 - 显而易见的方法。
但是没关系,现在你可以选择你喜欢的任何东西:)
答案 2 :(得分:1)
使用正则表达式:
import re
if re.match("[0-9/]+$", variable):
pass # do something
re.match
检查变量是否与开头的表达式匹配。表达式由字符类[0-9/]
(数字和斜杠),+
(表示一次或多次)和美元符号组成,它代表行尾,因此它确保string不仅以数字(或斜杠)开头,而且还保持匹配字符类直到结束。
答案 3 :(得分:0)
您可以使用for
循环来检查char-by-char
def check(text):
for char in text:
if not (char.isdigit() or char == '/'):
return false
return true
if check(you_text):
print("OK")
如果你需要不同的字符,你可以使用带有允许字符的列表或文本 - 类似于:
def check(text):
for char in text:
if char not in "0123456789/":
return false
return true
答案 4 :(得分:0)
只是另一个想法。
>>> set('01/02/2016') <= set('0123456789/')
True
>>> set('01/02 2016') <= set('0123456789/')
False
答案 5 :(得分:0)
您也可以使用列表理解和any()
函数
In [1]: mystring = '01/02/2016'
In [2]: all(c in '0123456789/' for c in mystring)
Out[2]: True