2015-10-08 5 views
2

мне нужна команда в питона, который фильтрует буквы в строке, но не удаляя их, например:питон фильтр буквы в строке

string =raw_input("Enter the string:") 
if string.startswith("a") and string.endswith("aaa"): 
    print "String accepted" 
else: print "String not accepted" 
if "ba" in string: 
    print "String accepted" 
else : 
    print "String is not accepted" 

Что я должен добавить, чтобы запретить другие буквы, кроме а и Ь в string

+1

@machineyearning тип 'str'; 'string' является стандартным библиотечным модулем, поэтому, вероятно, лучше не скрывать его, но это не так уж и важно. – jonrsharpe

+0

@machineyearning: как уже сказал jonrsharpe, здесь нет тени. –

+0

'string' - это не класс, а встроенный модуль. Построенные - это те имена, которые вы можете найти в '__builtins__'. Возможно, вы хотели сказать, что строка является модулем из стандартной библиотеки. –

ответ

1

Вы можете использовать набор, преобразовать строку в набор и проверить, есть ли ее набор subset только a и b. Пример -

s = raw_input("Enter the string:") 
validset = set('ab') 
if set(s).issubset(validset): 
    print "String accepted" 
else: 
    print "String not accepted" 

Demo -

>>> s = "abbba" 
>>> validset = set(['a','b']) 
>>> if set(s).issubset(validset): 
...  print "String accepted" 
... else: print "String not accepted" 
... 
String accepted 

>>> s = "abbbac" 
>>> if set(s).issubset(validset): 
...  print "String accepted" 
... else: print "String not accepted" 
... 
String not accepted 

Или, как указано в комментариях вы можете использовать вместо set.issuperset(). Пример -

s = raw_input("Enter the string:") 
validset = set('ab') 
if validset.issuperset(s): 
    print "String accepted" 
else: 
    print "String not accepted" 
+2

Вы также можете использовать 'validset.issuperset (s)'. Таким образом вам не нужно преобразовывать 's' в набор. –

+0

Что сказал @AndreaCorbellini - плюс 'validset = set ('ab')' также является опцией –

+0

Да, правильно, я разместил комментарии в ответе. Спасибо –

2

Вы можете просто заменить их на пустую строку и проверить, есть ли что-нибудь осталось:

string = raw_input("Enter the string:") 
if string.replace('a','').replace('b',''): 
    print "String not accepted" 
else: 
    print "String accepted" 

Исходная строка string не будет изменен.

+1

Что в Python 2.x было бы лучше как 'string.translate (None, 'ab')' –

0

Вы можете использовать регулярное выражение для поиска букв и комбинаций, которые вы хотите фильтровать.

^((?![abcd]).)*$ будет соответствовать вещи, которые не содержат a, b, c или d.

1

Это хорошее использование регулярных выражений:

import re 
my_string = raw_input("Enter the string:") 
if re.match('^[ab]+$', my_string): 
    print "String accepted" 
else : 
    print "String is not accepted" 

Это будет соответствовать строки, которые содержат только символы a и b, не-нулевой длины. Если вы хотите совместить строки нулевой длины, используйте * вместо +.

0

Попробуйте что-нибудь в этом роде. Он позволяет устанавливать несколько букв, символов и т. Д.

valid_char = ['a', 'b'] 

def validate(s): 
    for char in s: 
     if char not in valid_char: 
      return False 
    return True 

if validate(input("Enter the string:")): 
    print('Sting Accepted') 
else: 
    print('Sting not Accepted') 
+0

Я бы рекомендовал использовать набор для 'valid_char', чтобы получить сложность * O (n) *. –

+0

Хм, никогда не использовавшийся ранее, ответ выше выглядит как лучший вариант –

Смежные вопросы