从 python 列表中删除邮政编码(从 MapQuest 输出中获取州名)

Posted

技术标签:

【中文标题】从 python 列表中删除邮政编码(从 MapQuest 输出中获取州名)【英文标题】:Removing the zip code from a python list (to obtain the state name from MapQuest output) 【发布时间】:2018-11-11 07:46:30 【问题描述】:

这应该很简单,但无法让它工作。

地理定位 MapQuest API 向我返回了一些字符串。我想将状态名称与这些字符串隔离开来,这有点困难。想想“Pennsylvania Avenue”(位于 D.C.),然后是“Washington”,它可以是一个州,也可以是街道名称和城市。

s = "Goldman Sachs Tower, 200, West Street, Battery Park City, Manhattan Community Board 1, New York County, NYC, New York, 10282, United States of America"
s = "9th St NW, Logan Circle/Shaw, Washington, District of Columbia, 20001, United States of America"
s = "Casper, Natrona County, Wyoming, United States of America"

但我注意到 MapQuest 将州名写在邮政编码之前,靠近字符串的末尾。

要获得州名,这是可行的,也就是说,如果有邮政编码

s = s.split(",")
s = [x.strip() for x in s]
state = s[-3]

但是,当没有邮政编码时,如第三个字符串,那么我得到的是县(Natrona County)。

我尝试通过以下方式消除邮政编码:

s = s.split(",")
s = [x.strip() for x in s if '\d5' not in x ]

但是正则表达式 '\d5' 不起作用 - 我想要怀俄明州,而不是纳特罗纳县。

【问题讨论】:

你是在导入re模块吗?然后设置你的正则表达式进行搜索等?如果不是我建议你阅读docs.python.org/3/library/re.html 是的,我确实import re 【参考方案1】:

使用re:

import re

s = "9th St NW, Logan Circle/Shaw, Washington, District of Columbia, 20001, United States of America"

s = s.split(",")
number = re.compile(r"\d5")
s = [x.strip() for x in s if not number.search(x)]
print s
print s[-2]

输出:

['9th St NW', 'Logan Circle/Shaw', 'Washington', 'District of Columbia', 'United States of America']
District of Columbia

这里有一些简单的小教程:regex tutorial

【讨论】:

以上是关于从 python 列表中删除邮政编码(从 MapQuest 输出中获取州名)的主要内容,如果未能解决你的问题,请参考以下文章

Python:从列表中删除逗号,以便我可以使用 pandas 将数据导入 Excel 中的单独单元格

python从列表中删除元素

Python 3 - 在链表中使用递归

从 Python 中的大字符串中删除编码的 HTML 标记

从Python列表中的特定位置删除项目[重复]

从 Python 列表中删除重复项