2015-11-18 4 views
1

Я пытаюсь выяснить, есть ли простое средство для циклов и списков, чтобы проверить, содержит ли строка ввода пользователя буквы или буквы и апостроф, но не числа или буквы и цифры (буквы и цифры и апостроф)?Как проверить, содержит ли строка буквы или буквы и апостроф, но нет чисел?

Я пробовал множество методов и, похоже, не понял его? Я был бы признателен за любые выводы! Благодарю.

+3

регулярное выражение является ключевым словом. – karakfa

+0

Есть ли способ сделать это без регулярного выражения? – kssan

+0

Непонятно, что именно вы ищете. Похоже, вам нужны только строки без числовых цифр, это правильно? –

ответ

2

Кажется, что вам нужны только строки, содержащие буквы (плюс, возможно, апостроф), но не числа, хотя вы более подробно выразили требования. Это может быть достигнуто без регулярных выражений следующим образом:

not any(c for c in my_str if c not in string.ascii_letters + "'") 

Смотрите следующий пример кода:

>>> test = ['abcde', "abcde'", 'abcde123', "abcde'123", 'abcde.'] 
>>> for s in test: 
... print(s, '-->', not any(c for c in s if c not in string.ascii_letters + "'")) 
... 
abcde --> True 
abcde' --> True 
abcde123 --> False 
abcde'123 --> False 
abcde. --> False 

Надеюсь, это очевидно, что было бы более эффективным, чтобы сделать string.ascii_letters + "'" только один раз, и что вы должны import string первый. Это просто пример.

+1

большое вам спасибо! – kssan

1

Вы также можете использовать set.issuperset указав набор допустимых символов:

from string import ascii_letters 
allowed = set(ascii_letters+"'") 
test = ['abcde', "abcde'", 'abcde123', "abcde'123", 'abcde.'] 
for s in test: 
    print("{} {}".format(s, allowed.issuperset(s))) 

Выход:

abcde True 
abcde' True 
abcde123 False 
abcde'123 False 
abcde. False 
Смежные вопросы