最佳纯 Python 实现是什么,用于检查字符串是否包含字母表中的任何字母?
string_1 = "(555).555-5555"
string_2 = "(555) 555 - 5555 ext. 5555
string_1
没有包含字母所以返回 False
,而 string_2
包含字母所以返回 True
。
最佳纯 Python 实现是什么,用于检查字符串是否包含字母表中的任何字母?
string_1 = "(555).555-5555"
string_2 = "(555) 555 - 5555 ext. 5555
string_1
没有包含字母所以返回 False
,而 string_2
包含字母所以返回 True
。
正则表达式应该是一种快速的方法:
re.search('[a-zA-Z]', the_string)
any(c.isalpha() for c in string_1)
非常符合Python风格。 - Jollywatt简洁胜于复杂
。请查看上面OP的评论:他只想匹配罗马字母。 - JBernardore
模块导入正则表达式操作(适用于Python 2.7到3.9.5)。 - carloswm85怎么样:
>>> 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
str.isalpha
,调用速度要快得多)。 - JBernardoislower()
来查看它是否包含一些小写字母(以及其他字符)。or
它与isupper()
结合起来,也可以检查它是否包含一些大写字母:>>> z = "(555) 555 - 5555 ext. 5555"
>>> z.isupper() or z.islower()
True
以下内容:字符串"test"中没有字母,结果为false。
>>> z= "(555).555-5555"
>>> z.isupper() or z.islower()
False
>>>
不要与isalpha()
混淆,它仅在所有字符都是字母时返回True
,这不是你想要的。
请注意,Barm的答案很好地完成了我的答案,因为我的答案无法很好地处理混合情况。
我喜欢@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
我测试了上述每种查找给定字符串中是否包含任何字母的方法,并发现在标准计算机上每个字符串的平均处理时间。
~250 ns。
import re
~3 微秒
re.search('[a-zA-Z]', string)
~6微秒用于
any(c.isalpha() for c in string)
大约850纳秒用于
string.upper().isupper()
你可以像这样使用正则表达式:
import re
print re.search('[a-zA-Z]+',string)
你也可以额外做这个
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