首页 文章

使用不同的空格数解析名称和地址信息

提问于
浏览
0

我有一个逗号分隔的文本文件 . 每行的第5个字段包含名称和地址信息 . 该名称通过'¬'字符与街道信息分开 . 同一个角色也将城市分开 . 示例字段将是:
"¬BOL¬MICKEY M MOUSE¬123 TOMORROW LANE¬ORLANDO FL 12345-6789¬¬¬¬EOL¬"

我需要将名称分成几个部分,将城市|州| zip分成几部分 . 但是,名称可能有也可能没有中间的首字母,所以:

m = l [4] .split("¬")
firstName,mi,lastName = m [2] .split()

如果没有中间的首字母,则不起作用 . 此外,城市的名称可能有也可能没有空格,所以:

city,state,zipCode = m [4] .split()

如果这个城市是“圣安东尼奥”或“里约热内卢”,那将无济于事 .

最重要的是,如何解析该部分并不总是采用相同格式的字段?

2 回答

  • 0

    在您的示例中,似乎您可以通过获取“第一个字段”,“最后字段”和“介于两者之间的所有内容”来解决问题:

    m = line.split("¬")[2].split()
    firstname = m[0]
    surname = m[-1]
    initials = m[1:-1] # Maybe just keep this as a list?
    

    和:

    m = line.split("¬")[4].split()
    city = ' '.join(m[:-2])
    state = m[-2]
    zipCode = m[-1]
    

    通常,您可以通过从开始和结束获取“固定”字段来处理包含空格的单个字段,剩下的任何内容都是可以包含空格的字段 . 只要有两个字段在同一个字段中包含空格专栏,你无能为力 . 它含糊不清 .

    使用您拥有的数据格式,如果有姓名包含空格的人,例如Robert Van de Graff,您可能会遇到一些问题 . 如果您通过查找仅包含一个字母的单词,例如:Robert J. Van de Graaff,并使用这些单词来定义名字的开头和结尾的位置,则可以解决此问题 . 但总的来说,你可能会有问题 .

    还有一个国际化问题隐藏在这里:不是每个人都首先写下他们的“名字” - 有时他们首先写下他们的姓氏 .

  • 3

    基本上Anon建议,你可以像这样实现它:

    cityInfo = m[4].split()
    city, state, zipCode = ' '.join(cityInfo[:-2]), cityInfo[-2], cityInfo[-1])
    

相关问题