【发布时间】:2010-08-23 04:41:18
【问题描述】:
我有一个字符串,比如
397 Walker Road Wayne, PA 19087
我需要从中提取地址信息(街道地址、城市、州、邮编)。问题是,数据库中的空白量并不一致。
我已经用逗号分割了字符串,并提取了状态和 zip。但是我不知道如何让这座城市离开那里,特别是因为白色空间不一致。
【问题讨论】:
我有一个字符串,比如
397 Walker Road Wayne, PA 19087
我需要从中提取地址信息(街道地址、城市、州、邮编)。问题是,数据库中的空白量并不一致。
我已经用逗号分割了字符串,并提取了状态和 zip。但是我不知道如何让这座城市离开那里,特别是因为白色空间不一致。
【问题讨论】:
您可以使用诸如[\s]{2,} 之类的正则表达式删除多余的空格,这意味着找到 2 个或更多连续的空格。此正则表达式不会匹配单个空格。然后,您可以用空白替换匹配的空格,然后提取城市(提取城市是不同的问题)。希望这会有所帮助。
【讨论】:
在拆分字符串之前,使用trim()method 修剪空格。然后使用正则表达式拆分字符串,查找字符后面的数字。
【讨论】:
问题是,数据库中的空白数量不一致。
如果不同的数据字段之间至少有两个空格,那么应该可以这样:s.split("\\s\\s+")。两个或多个空白字符的每个序列将被视为此处的分隔符。
但是如果数据可以是任何格式并且根本没有一致性,那么没有算法可以帮助你:)
【讨论】:
好的,这是我的版本:
final String str = "397 Walker Road Wayne, PA 19087";
final String[] tokens = str.split("(\\s*,\\s*|\\s{2,})");
System.out.println( Arrays.toString(tokens));
输出:
[397 Walker Road, Wayne, PA, 19087]
此正则表达式查找逗号(两边都有可选的空格)或至少两个空格字符。
【讨论】:
我认为皮特的意思是
沃克路 397 号韦恩,宾夕法尼亚州 19087
以“韦恩”为城市
但是
宾夕法尼亚州盐湖城沃克路 397 号,邮编 19087
以“盐湖城”为城市
假设逗号之前的整个部分是固定宽度,使用 [\s]{2,}
或者,您可能需要对常见的“街道”结尾进行匹配,例如 road, rd, street, st [hmm, st. = 圣人,这可能是个问题]、大道、大道等
抱歉,Pete,我认为我们需要更多地了解您的数据集是什么样的,以及您有哪些其他可用数据(仅限美国?、城市列表?等)
罗杰
【讨论】:
没有办法在所有情况下都这样做。您可以编写一个算法,假设街道部分总是以 Road、Street、Lane 等结尾。
【讨论】: