-2

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

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\-]+[!-?]')

我不能使用非标准库

4

3 回答 3

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])
于 2012-11-10T19:09:09.420 回答
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

当然,这不包括用引号括起来的单词,或单词末尾的多个标点符号,或所有类型的标点符号。但它应该为您提供一个很好的起点,同时您可以了解“单词”是什么。

于 2012-11-10T19:04:39.360 回答
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
>>> 
于 2012-11-10T20:34:15.373 回答