2013-12-17 129 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