2013-12-17 62 views
0

我有一個字符串:我想從還包含數字的字符串中提取字符串 - 蟒蛇

"23423 NewYork" 

我只想NewYork如此。我可以把它切成塊,但訂單可以是不同的,如"newyork 23244"等。

什麼是從字符串中提取字符串,其中也有數字的最佳方式是什麼?

+2

你能提供什麼樣的輸入可能看起來像和輸出應該是什麼更好的規範?如果輸入是「紐約1234」呢?如果是「紐約」呢?如果它是「New 1234 York」呢?如果這是哈姆雷特的完整文本呢? – user2357112

+1

它總是分成兩部分,還是可以像「232紐約123131城市」混合? –

+0

它也可以是「new 2635 york」或「new york」 – doniyor

回答

3
>>> s = "23423 NewYork" 
>>> [sub for sub in s.split() if all(c.isalpha() for c in sub)] 
['NewYork'] 
>>> s = "NewYork 23423" 
>>> [sub for sub in s.split() if all(c.isalpha() for c in sub)] 
['NewYork'] 
+0

我最喜歡這個,但我也忍不住在這裏放置itertools解決方案。 –

+0

看起來不錯,這也是做「新6757約克」嗎? – doniyor

+0

@ doniyor:喲!給它一個鏡頭;] – inspectorG4dget

2
import re 
s = "23423 NewYork" 
m = re.findall('NewYork', s) 

羅?

import re 
s = "23423 NewYork" 
m = re.findall(r'[^\W\d]+', s) 

更一般的情況

+1

'nah'是什麼意思? –

+0

「它會合適」的快捷方式 – rook

+1

會不會是「wibs」? – inspectorG4dget

1
from re import sub 

s= "23423 NewYork" 
sub('\d',"",s).strip() 

這應該做你所需要的。

\ d刪除字符串中的所有數字,strip()應刪除任何多餘的空格。

+0

這似乎很好 – doniyor

1

你也可以嘗試使用在以下itertools

from itertools import takewhile, dropwhile 

a = "23423 NewYork" 
b = "NewYork 23423" 


def finder(s): 
    if s[0].isdigit(): 
     return "".join(dropwhile(lambda x: x.isdigit() or x.isspace(), s)) 
    else: 
     return "".join(takewhile(lambda x: not x.isdigit() or x.isspace(), s)) 

if __name__ == '__main__': 
    print finder(a) 
    print finder(b) 
+0

這是否也提取「新的233紐約」? – doniyor

+0

@ doniyor是否應該?我沒有看到你的規格。但要回答你的問題,不,它不會工作。 –

+0

噢,對不起,我忘了提及它...我會在那之後工作,謝謝噸無論如何你的幫助..等待火車在火車站:) – doniyor