Python中基于通用分隔符分割字符串及地址字段提取问题
嘿,我来帮你搞定这个地址分割的问题!咱们一步步来,先解决你当前的疑问,再聊聊更优的实现方式~
1. 延续你现有思路提取剩余信息
你已经成功拿到了街道信息,其实可以用同样的思路继续拆分剩下的内容,不过记得加个strip()去掉每个部分前后的空格(原字符串里分隔符两边有空格):
address = '1234 Broadway Ave | Los Angeles | CA | 94530' # 提取街道 street = address[:address.index('|')].strip() # 拿到街道之后的剩余部分 remaining = address[address.index('|') + 1:] # 提取城市 city = remaining[:remaining.index('|')].strip() remaining = remaining[remaining.index('|') + 1:] # 提取州 state = remaining[:remaining.index('|')].strip() # 提取邮编(最后一部分没有后续分隔符) zip_code = remaining[remaining.index('|') + 1:].strip() print(street) # 输出:1234 Broadway Ave print(city) # 输出:Los Angeles print(state) # 输出:CA print(zip_code) # 输出:94530
2. 更简单的实现:用
split()分割字符串 其实Python的字符串自带split()方法,能直接按指定分隔符把字符串拆成列表,这比一次次找索引高效多了!
如果你的地址分隔符固定是|(空格+竖线+空格),可以直接这样写:
address = '1234 Broadway Ave | Los Angeles | CA | 94530' # 按' | '分割成列表 parts = address.split(' | ') # 直接把列表元素赋值给对应的变量 street, city, state, zip_code = parts print(street, city, state, zip_code)
要是担心分隔符前后的空格不固定(比如有的地方是多个空格),可以先按|分割,再给每个元素去掉前后空格:
parts = [part.strip() for part in address.split('|')] street, city, state, zip_code = parts
这种写法更鲁棒,能处理各种空格不一致的情况~
3. 正则表达式(适合复杂地址场景)
既然你问到了正则,我给你举个简单的例子,虽然你之前没接触过,但这个场景下的正则很好理解:
正则的核心是用匹配模式来定位你要的内容。咱们这个地址的模式是「内容 | 内容 | 内容 | 内容」,可以用下面的代码提取:
import re address = '1234 Broadway Ave | Los Angeles | CA | 94530' # 定义匹配模式:(.*?) 表示匹配任意字符,直到遇到后面的' | ' pattern = r'(.*?) \| (.*?) \| (.*?) \| (.*)' # 用模式匹配地址字符串 match_result = re.match(pattern, address) if match_result: street = match_result.group(1) city = match_result.group(2) state = match_result.group(3) zip_code = match_result.group(4) print(street, city, state, zip_code)
解释一下:r''表示原始字符串(避免转义字符干扰),(.*?)是「非贪婪匹配」,会精准停在后面的|前;最后一个(.*)因为后面没有分隔符,直接匹配到字符串末尾。
不过要说明的是:如果你的地址格式很固定,split()方法足够简单高效;正则更适合处理格式不统一的复杂地址(比如有的地址有额外的公寓号、不同的分隔符等)。
内容的提问来源于stack exchange,提问作者JD2775
相关产品推荐
相关产品推荐

