如何检查字符串是否包含字母表中的任何字母?

时间:2012-01-31 00:29:56

标签: python string

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

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

string_1将返回False,因为其中没有字母,而string_2会返回True来收信。

7 个答案:

答案 0 :(得分:93)

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

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

答案 1 :(得分:55)

怎么样:

>>> 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

答案 2 :(得分:17)

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

下面:字符串中的字母:test yield true

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

下面:字符串中没有字母:test产生错误。

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

只有当所有字符都是字母时,isalpha()才会返回True,这不是你想要的。

请注意,Barm's答案很好地完成了,因为我的处理好不好。

答案 3 :(得分:8)

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

import re

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

答案 4 :(得分:6)

我喜欢@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

答案 5 :(得分:0)

您还可以另外执行此操作

import re
string='24234ww'
val = re.search('[a-zA-Z]+',string) 
val[0].isalpha() # returns True if the variable is an alphabet
print(val[0]) # this will print the first instance of the matching value

另请注意,如果变量 val 返回None。这意味着搜索未找到匹配

答案 6 :(得分:0)

我测试了上述每种方法,以确定给定字符串中是否包含任何字母,并在标准计算机上找出每个字符串的平均处理时间。

〜250 ns for

import re

〜3 µs for

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

〜6 µs for

any(c.isalpha() for c in string)

〜850 ns

string.upper().isupper()


与所谓的相反,导入 re 所需的时间可以忽略不计,而与 re 进行搜索相比,只需大约一半的时间即使是相对较小的字符串,也可以迭代 isalpha()
因此,对于更大的字符串和更大的计数,re会大大提高效率。

但是将字符串转换为大小写并检查大小写(即 upper()。isupper() lower()。islower()中的任何一个)在这里赢。在每个循环中,它比 re.search()快得多,甚至不需要任何其他导入。