在某些情况下,我需要验证包含数字和字母的字符串,并且我想知道最简单的方法
例如,在井字游戏/ Noughts and Crosss中,我需要确保用户输入的位置在“ 1-3”和“ a-c”之间
为了更好地理解我的要求:
pos = "2c"
>>> Input is valid
pos = "1z"
>>> Input is invalid: Letters outside range a-c
pos = "5b"
>>> Input is invalid: Numbers outside range 1-3
答案 0 :(得分:0)
只有9种可能的有效输入,因此您可以可以检查全部,或者可以使用正则表达式查看输入是否与所有有效输入匹配。
import re
pattern = re.compile(r'^[123][abc]$')
m = pattern.match("2b")
if m:
print("It's a match!")
正则表达式r'^[123][abc]$'
查找字符串的开头,然后是1、2或3,然后是a,b或c,然后是字符串的结尾。超出该范围(或超过两个字符)的任何输入都不应匹配。
答案 1 :(得分:0)
没有正则表达式,您可能会遇到类似这样的情况:
def validate(i):
if type(i) != str or len(i) != 2:
return False
d, char = int(i[0]), i[1]
return d >= 1 and d <= 3 and char in 'abc'
print(validate('1c')) #True
print(validate('3a')) #True
print(validate('2b')) #True
print(validate('36')) # False
print(validate('106')) # False
print(validate('10c')) # False
print(validate(10)) # False
但是,这确实假定输入中的第一个字符可以转换为int
。
答案 2 :(得分:0)
按以下方式使用正则表达式:
import re
example_str = '1c'
p = re.compile('^[1-3][a-c]$')
if p.match(example_str):
# Valid
else:
# Invalid
您可以使用-
在模式中选择范围。