我有一个字符串,如
397 Walker Road Wayne, PA 19087
我需要从中提取地址信息(街道地址,城市,州,邮编)。问题是,数据库中的空白量不一致。
我在逗号上拆分了字符串,并提取了状态和zip。但我对如何让城市离开那里感到茫然,特别是因为白色空间不一致。
答案 0 :(得分:3)
您可以使用[\s]{2,}
之类的正则表达式删除额外的空格,这意味着找到2个或更多连续的空格。这个正则表达式不会匹配单个空格。然后,您可以用空白替换匹配的空格,然后提取城市(提取城市是不同的问题)。希望这会有所帮助。
答案 1 :(得分:3)
在拆分字符串之前,使用trim()
方法修剪空格。然后使用正则表达式分割字符串,在Charecter之后查找数字。
答案 2 :(得分:0)
问题是,数据库中的空格量不一致。
如果不同的数据字段之间至少有两个空格,则类似这样的内容应该有效:s.split("\\s\\s+")
。这里将两个或多个空格字符的每个序列视为分隔符
但是,如果数据可以是任何格式并且根本没有一致性,那么没有算法可以帮助您:)
答案 3 :(得分:0)
好的,这是我的版本:
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]
此正则表达式查找逗号(两边都有可选的空格)或至少两个空白字符。
答案 4 :(得分:0)
我认为Pete的意思是
397 Walker Road Wayne,PA 19087
有“韦恩”作为城市
但是
397 Walker Road Salt Lake City,PA 19087
有“盐湖城”作为城市
假设逗号之前的整个部分是固定宽度,使用[\ s] {2,} <使用Shekhar的答案(分别是两个或多个空格的序列的左右)可能会得到相当好的结果。 / p>
或者,您可能需要在常见的“街道”结尾上进行匹配,例如road,rd,street,st [hmm,st。 = saint,这可能是一个问题],avenue,ave等
对不起Pete,我想我们需要更多地了解您的数据集是什么样的,以及您有哪些其他数据(仅限美国?,城市列表?等)
罗杰
答案 5 :(得分:0)
在所有情况下都无法做到这一点。您可以编写一个算法,假设街道部分总是以Road,Street,Lane等结尾。