2015-02-26 4 views

ответ

3

Вы можете использовать re.search

if re.search(r'[a-zA-Z\d]', string): 

Он возвращает объект соответствия, если строка содержит по-крайней мере, буквы или цифры.

Пример:

>>> s = "foo0?" 
>>> re.search(r'[a-zA-Z\d]', s) 
<_sre.SRE_Match object; span=(0, 1), match='f'> 
>>> s = "???" 
>>> re.search(r'[a-zA-Z\d]', s) 
>>> s = "???0" 
>>> re.search(r'[a-zA-Z\d]', s) 
<_sre.SRE_Match object; span=(3, 4), match='0'> 
>>> 
+0

Никогда не замечал, что python 3 изменил 'repr' объектов соответствия, это приятно. – stranac

+0

Так будет ли «foo0» возвращаться как истинное? –

+0

yep ............. –

1

str.isalnum:

In [16]: s = "foo"  
In [17]: s.isalnum() 
Out[17]: True 
In [20]: s = "123" 
In [21]: s.isalnum() 
Out[21]: True 
In [22]: s = "foo123" 
In [23]: s.isalnum() 
Out[23]: True 

Затем используйте любой:

any(x.isalnum() for x in s) 

In [24]: s = "[email protected]" 
In [25]: any(x.isalnum() for x in s) 
Out[25]: True 
In [27]: s = "[email protected]()" 
In [28]: any(x.isalnum() for x in s) 
Out[28]: False 

Это будет короткое замыкание, если мы найдем какой-либо альфа- или числовой символ или вернуть значение False если строка не содержит ни одной.

+0

Я предполагаю, что op ожидает «% * & ^% A», чтобы вернуть «True», так как «хотя бы один символ» является буквой. – Falko

0

Другим решением может быть (не забудьте import string):

any(c in s for c in string.letters + string.digits) 

(В отличие от решения регулярных выражений это Локальнозависимый, например, в том числе немецких умляутов и т.д.)

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

  • Нет связанных вопросов^_^