2013-10-17 353 views
0

我必須在Python中編寫一個程序,它要求用戶輸入一個字符串,並且它只打印出以「s」或「S」開頭的單詞。我正在使用.split函數來創建單詞列表。但是,我無法弄清楚如何讓Python識別以「s」或「S」開頭的單詞。任何建議或幫助,非常感謝!Python中的分割函數

回答

2

我會用一個字符串的.lower方法,像這樣:

>>> mystr = 'Super Sally rode a super ship.' 
>>> [x for x in mystr.split() if x.lower()[0] == 's'] 
['Super', 'Sally', 'super', 'ship.'] 
>>> 

您也可以使用.startswith方法,而不是在位置0索引的字符串:

# This method, while longer, is really clear as to what's going on. 
[x for x in mystr.split() if x.lower().startswith('s')] 
+1

我更喜歡'x.lower()。startswith(「s」)' – Claudiu

+0

@Claudiu - Lol。我只是打字。 :) – iCodez

2

你可以使用字符串的startswith方法結合lower方法,該方法將字符串轉換爲全部小寫字母。

words = raw_input().split() 
for word in words: 
    if word.lower().startswith('s'): 
     # do something 

方法startswith將返回True當且僅當調用字符串開頭,你傳遞給它作爲參數的子字符串。

1

借款@ iCodez的奇妙例如串 - 這裏有一個正則表達式的方法:

>>> import re 
>>> mystr = 'Super Sally rode a super ship.' 
>>> re.findall(r's\S+', mystr, flags=re.I) 
['Super', 'Sally', 'super', 'ship.'] 

這節省了多達分割字符串和比較明確的情況下正常化。

此外,您還可以稍微調整它不能捕捉到不必要的標點符號,如:

>>> re.findall(r's\w+', mystr, flags=re.I) 
['Super', 'Sally', 'super', 'ship'] 
0

startswith其實需要一個元組。

所以:

words = raw_input() 
print [word for word in words.split() if word.startswith(('s', 'S'))] 

聽起來很像英語和易讀。我更喜歡它.lower()