只接受一种分隔符形式并拒绝多种类型的简单方法?

时间:2018-04-17 02:41:12

标签: python delimiter

我想知道如何制作接受只有一种分隔符的字符串的东西,如下所示:

car:bus:boat

并拒绝像:

car:bus-boat

我不确定如何创建这样的东西。

3 个答案:

答案 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)