2017-06-23 299 views
1

我一直在想這一段時間,但還沒有想出一個不使用一系列if-elif語句的高效解決方案。只從字符串中提取某些單詞並忽略數字等詞

比方說,我有以下字符串:

'Tennessee Tech' 

'Auburn 1st' 

'Southeast Missouri - Bottom of 2nd' 

'Tennessee - Top of 3rd' 

什麼是提取剛剛從這些字符串的隊名的最有效的方法是什麼?

換句話說,我所期望的輸出將是如下:

'Tennessee Tech' 

'Auburn' 

'Southeast Missouri' 

'Tennessee' 

附註:我不相信,有一些是由三個單詞(比如亞利桑那大學的任何球隊(我的目的) ),但是對於這個實例也會很滿意。

下面的代碼,我只寫了佔用數字移除元素:

s = 'Auburn 1st' 
string = s.split() 
for j, word in enumerate(string): 
    if any(char.isdigit() for char in word): 
     del string[j] 
team = ' '.join(string) 
print(team) 
+0

好吧,我是比較新的正則表達式,但我想我會希望它識別模式,如「字,直到「 - '或'數字'「? – rahlf23

+0

你有你感興趣的團隊名單嗎? – Chirag

+0

你的字符串是怎樣的?第一個(Tenessee Tech)在它之後似乎沒有任何東西,但其他人之後有一些東西。 如果它們全都後面跟一個連字符,可以用連字符分割並取第一部分。 – CentAu

回答

4

就像你在評論中說,使用正則表達式數字或破折號

import re 
new_string = re.split("(\s[-\d])", string_here)[0] 

之前提取的一切string_here是這個正則表達式的輸入。

*編輯,以不連字符分割,如果沒有一個空間之前,它

+0

您能否在正則表達式中添加一個條款來捕獲只有周圍空格的連字符? – Chirag

+0

只有當它們以空格開始時才被捕獲,這足夠嗎? – jacoblaw

+0

不客氣! PS,如果你想要空格連字符空格,使用're.split(「((\ s- \ s)|(\ d))」,string_here)[0]'。它表示尋找'「 - 」'或'「[任意數字]」 – jacoblaw