2012-11-10 86 views
-2

我需要寫功能,即檢查是否字字母,例如查找字母詞

my_function('Hello!') 
>> True 
my_function('How') 
>> True 
my_function('[email protected]') 
>> False 
my_function('</html>') 
>> False 

我不知道。我在re lib中真的很糟糕。

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

我不能使用非標準庫

+0

-1。這個問題顯示沒有努力嘗試自己解決這個問題。 –

+2

爲什麼'你好!''「按字母順序排列」但是''不是? –

+0

因爲任何帶有'?'和'!'的單詞都是按字母順序排列的 – JohnDow

回答

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]) 
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 

當然,這並不佔一個字包裹在報價或多個標點符號在單詞的末尾,或者所有類型標點符號。但是,當你確定一個「單詞」是什麼時,它應該給你一個開始的好地方。

0

最好用集,而不是此一正則表達式:

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

>>> for wrd in 'Hello! Hello How [email protected] </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('[email protected]') == False 
is_alpha('</html>') == False 
>>> 
相關問題