2012-01-31 152 views
44

什么是最好的纯Python实现来检查一个字符串是否包含字母表中的任何字母?如何检查字符串是否包含字母表中的任何字母?

string_1 = "(555).555-5555" 
string_2 = "(555) 555 - 5555 ext. 5555 

string_1将返回False对于具有它没有字母表的字母和string_2将返回True具有信件。

+1

是否仅限于英语a/z字母表?应该考虑像德文这样的来自其他字母的“特殊”字符吗? – Kotch 2012-01-31 00:35:32

+0

你有没有机会收到unicode?或者只是简单的ascii罗马字母? – KobeJohn 2012-01-31 00:39:06

+0

好时机:)无论如何,如果你需要使用unicode字符测试字符串的帮助,请检查这个类似的问题。 – KobeJohn 2012-01-31 00:44:52

回答

66

正则表达式应该是一个快速的方法:

re.search('[a-zA-Z]', the_string) 
+1

谢谢JBernado,这就是我最终做的事情,它完美地工作,完成我需要做的事情。 – 2012-01-31 17:16:22

+4

@JustinPapez你应该接受这个答案然后... – sadmicrowave 2013-05-30 18:16:12

+0

哎呀,我完全忘了,谢谢你的提醒。 – 2013-06-01 17:53:29

49

如何:

>>> string_1 = "(555).555-5555" 
>>> string_2 = "(555) 555 - 5555 ext. 5555" 
>>> any(c.isalpha() for c in string_1) 
False 
>>> any(c.isalpha() for c in string_2) 
True 
+0

'set(string_1)'会更有效吗? – 2012-01-31 00:41:04

+1

@Rik。你的意思是在测试之前将string_1转换为一个集合?不,它不会更有效率。这是保证处理所有角色至少一次,而我相信任何功能会遇到第一个虚假时短路(停止)。 – KobeJohn 2012-01-31 00:43:32

+0

此代码会稍微慢一些,因为它需要每个字符的函数调用。转换为'set'可能会或不会减少函数调用,但会增加一些开销。 – JBernardo 2012-01-31 00:45:31

8

您可以使用正则表达式是这样的:

import re 

print re.search('[a-zA-Z]+',string) 
9

您可以在字符串中使用islower()看看它是否包含一些小写字母(以及其他字符)。 orisupper()也检查是否包含一些大写字母:

下面

:字母串的:测试良率真

>>> z = "(555) 555 - 5555 ext. 5555" 
>>> z.isupper() or z.islower() 
True 
下面

:在字符串中没有字母:测试良率假。

>>> z= "(555).555-5555" 
>>> z.isupper() or z.islower() 
False 
>>> 

不要与isalpha()返回True只有当所有字符是字母,这是不是你想要的东西混在一起。

请注意,Barm的回答非常好,因为我没有很好地处理混合情况。

+1

我喜欢这将测试它是否包含字母,而不仅仅是测试如果输入是全部字母。 – Cornbeetle 2017-04-20 16:14:02

+0

@Cornbeetle是的,那种真正回答所有这些年来的问题,谢谢 – 2017-04-20 16:33:33

2

我喜欢@ jean-françois-fabre提供的答案,但它不完整。
他的方法将工作,但只有当文本包含纯小写或大写字母:

>>> text = "(555).555-5555 extA. 5555" 
>>> text.islower() 
False 
>>> text.isupper() 
False 

更好的方法是先大写或小写您的字符串,然后检查。

>>> string1 = "(555).555-5555 extA. 5555" 
>>> string2 = '555 (234) - 123.32 21' 

>>> string1.upper().isupper() 
True 
>>> string2.upper().isupper() 
False 
相关问题