我需要编写函数,检查单词是否按字母顺序排列,例如
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\-]+[!-?]')
我不能使用非标准的库
答案 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
>>>