如何检查字符串是否是带正则表达式的单词?

时间:2018-01-09 15:52:49

标签: python regex string

我想检查用户输入的字符串(如'hello')是否只包含一个单词而不包含任何其他单词。仅适用于那些只包含[a-zA-Z]并且没有空格或点或下划线或其他单词的情况。

例如:

'hello' true
'hello_' false
'hello world' false
'h.e.l.l.o' false

我不知道怎么写正则表达式。需要帮助。

2 个答案:

答案 0 :(得分:3)

这里没有必要写一个正则表达式。这已经在Python中内置str.isalpha

  

如果字符串中的所有字符都是字母字符且至少有一个字符,则返回True,否则为False

所以我们可以查看:

if your_string.isalpha():
    pass

但请注意:

  

注意str.isalpha还包含变音符号等。例如:

>>> 'ä'.isalpha()
True
     

这不是本身的一个问题。但它可能是需要考虑的因素。

如果您不想要diacricics,您可以检查所有字符的ord(..)是否小于128:

if your_string.isalpha() and all(ord(c) < 128 for c in your_string):
    pass

使用内置函数的优点是这些更自我解释(isalpha()清楚地表明它在做什么),而且它不太可能包含任何错误(我不是说其他​​方法 包含错误,但是自己编写一些东西,通常意味着它没有经过有效测试,因此它仍然无法完全覆盖 edge corner 情况。

答案 1 :(得分:1)

您可以使用主播^$

import re
s = "hello"
if re.findall('^[a-zA-Z]+$', s):
   pass #string condition met

re.findallre.search之间的效果比较:

import timeit
s1 = """
import re
re.findall('^[a-zA-Z]+$', 'hello')
"""
print(timeit.timeit(stmt=s1,number=10000))
>>> 0.0147941112518

s2 = """
import re
re.match('^[a-zA-Z]+$', 'hello')
"""
print(timeit.timeit(stmt=s2,number=10000))
>>> 0.0134868621826

虽然re.match的效果略好于re.findall,但我更喜欢re.findall,因为1)最初查看结果更容易,2)立即将结果存储在列表中。