我有一个字符串:我想从还包含数字的字符串中提取字符串 - 蟒蛇
"23423 NewYork"
我只想NewYork
如此。我可以把它切成块,但订单可以是不同的,如"newyork 23244"
等。
什么是从字符串中提取字符串,其中也有数字的最佳方式是什么?
我有一个字符串:我想从还包含数字的字符串中提取字符串 - 蟒蛇
"23423 NewYork"
我只想NewYork
如此。我可以把它切成块,但订单可以是不同的,如"newyork 23244"
等。
什么是从字符串中提取字符串,其中也有数字的最佳方式是什么?
>>> 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']
我最喜欢这个,但我也忍不住在这里放置itertools解决方案。 –
看起来不错,这也是做“新6757约克”吗? – doniyor
@ doniyor:哟!给它一个镜头;] – inspectorG4dget
import re
s = "23423 NewYork"
m = re.findall('NewYork', s)
罗?
import re
s = "23423 NewYork"
m = re.findall(r'[^\W\d]+', s)
更一般的情况
from re import sub
s= "23423 NewYork"
sub('\d',"",s).strip()
这应该做你所需要的。
\ d删除字符串中的所有数字,strip()应删除任何多余的空格。
这似乎很好 – doniyor
你也可以尝试使用在以下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)
你能提供什么样的输入可能看起来像和输出应该是什么更好的规范?如果输入是“纽约1234”呢?如果是“纽约”呢?如果它是“New 1234 York”呢?如果这是哈姆雷特的完整文本呢? – user2357112
它总是分成两部分,还是可以像“232纽约123131城市”混合? –
它也可以是“new 2635 york”或“new york” – doniyor