我想知道如何制作接受只有一种分隔符的字符串的东西,如下所示:
car:bus:boat
并拒绝像:
car:bus-boat
我不确定如何创建这样的东西。
答案 0 :(得分:2)
那么,首先你必须定义什么是无效的限制器。连字符很可能是有效的带连字符的单词或名称的一部分,并且该算法无法区分这些。假设您有一个无效分隔符列表,您可以这样做:
def string_is_valid(s):
invalid_delimiters = ['-', ';']
for d in invalid_delimiters:
if d in s:
return False
return True
s1 = 'car:bus-boat'
print(string_is_valid(s1)) # False
s2 = 'car:bus:boat'
print(string_is_valid(s2)) # True
另一方面,如果你有一个分隔符列表,并且你想确保字符串上只有一种类型,你可以这样做:
def string_is_valid(s):
valid_delimiters = [',', ':', ';']
# For each delimiter in our list...
for d in valid_delimiters:
# If the delimiter is present in the string...
if d in s:
# If any of the other delimiters is in s (and the other delimiter isn't the same one we're currently looking at), return False (it's invalid)
if any([other_d in s and other_d != d for other_d in valid_delimiters]):
return False
return True
s1 = 'car:bus:boat'
print(string_is_valid(s1)) # True
s2 = 'car,bus,boat'
print(string_is_valid(s2)) # True
s3 = 'car,bus;boat'
print(string_is_valid(s3)) # False
答案 1 :(得分:1)
你可以有一个"允许的字母表"字符和计数不在其上的任何东西(因此将其解释为sep)。
e.g。
allowed = list('abcdefghijklmnopqrstuvxwyz')
def validate(string):
if len(set([k for k in string if k not in allowed])) > 1:
return False
return True
当然,你可以扩大大写字母等的允许范围。
答案 2 :(得分:0)
使用正则表达式:
import re
data = re.compile(r'^([a-zA-Z][:][a-zA-Z]){1, }$')
data.match(string)