【问题标题】:How to check if a string is word with regex?如何使用正则表达式检查字符串是否为单词?
【发布时间】:2018-01-09 15:52:48
【问题描述】:

我想检查用户输入的字符串(如'hello')是否只包含一个单词而没有其他内容。就像只对那些只包含 [a-zA-Z] 并且没有空格、点、下划线或其他单词的情况一样。

例如:

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

我不知道如何编写正则表达式。需要帮助。

【问题讨论】:

  • 您在问题中写了它,只需添加+ 即可:[a-zA-Z]+。您可能还想锚定它:^[a-zA-Z]+$.
  • 不需要正则表达式。 str.isalpha 可以。
  • hllo 是一个单词 true 还是 false
  • @usr2564301 是真的。我想要一个带有 [a-zA-Z] 的字符串。

标签: python regex string


【解决方案1】:

这里不需要写正则表达式。这已经在 Python 中内置了 str.isalpha:

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

所以我们可以检查它:

if your_string.isalpha():
    pass

但请注意:

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

>>> 'ä'.isalpha()
True

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

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

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

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

【讨论】:

  • Nitpick:这也将接受重音字母、变音符号,可能还有更多,但也许这正是 OP 真正想要的。 (我不是说错了,只是想指出这一点。)
  • 如有必要,您可以使用this thread 上讨论的方法从字符串中删除变音符号。
【解决方案2】:

您可以使用锚点^$

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) 立即将结果存储在列表中。

【讨论】:

  • 但是使用match 你不需要^$,并且不需要列表(如果只是因为你必须测试整个字符串,它只能出现零次或一次)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多