找到字母词

时间:2012-11-10 18:48:39

标签: python regex python-3.x

我需要编写函数,检查单词是否按字母顺序排列,例如

my_function('Hello!')
>> True
my_function('How')
>> True
my_function('F!@K')
>> False
my_function('</html>')
>> False

我不知道。我在re lib中非常糟糕。

begin_searcher = re.compile(r'[\w\-]')
end_searcher = re.compile(r'[\w\-]+[!-?]')

我不能使用非标准的库

3 个答案:

答案 0 :(得分:3)

非正则表达式解决方案

from string import ascii_letters
def foo(st):
    letters = ascii_letters
    letters_nd_term = letters + "?!"
    return not any([set(st[:-1]).difference(letters),st[-1] not in letters_nd_term])

答案 1 :(得分:2)

你必须更好地定义“单词”是什么。如果!和?一句话就结束了,怎么样。而且;和:等等?

这可以解决这个问题:

>>> import re
>>> pat = re.compile('[a-zA-Z]+[.,!?]?')
>>> m = pat.match(word) #where word is what you're checking
>>> True if m else False

当然,这并不包括用引号括起来的单词,或单词末尾的多个标点符号,或所有类型的标点符号。但是,当你弄清楚“单词”是什么时,它应该给你一个好的起点。

答案 2 :(得分:0)

最好使用集合而不是正则表达式:

>>> import string
>>> letters = set(string.ascii_letters)
>>> def is_alpha(word):
    return set(word).issubset(letters)

>>> for wrd in 'Hello! Hello How F!@K </html>'.split():
    print("is_alpha(%r) == %r" % (wrd, is_alpha(wrd)))


is_alpha('Hello!') == False
is_alpha('Hello') == True
is_alpha('How') == True
is_alpha('F!@K') == False
is_alpha('</html>') == False
>>>