我正在寻找用于从文本文件中解析测试邮政地址的算法或示例代码,并将其转换为Excel报告。
我收到的文本文件将有许多不同格式的邮政地址,如下所示:
Unit 8/25 Bright ST, NSW, 2010
UNIT 5, 77 CHAPMAL STREET
UNIT 4, 75 GREAT STREET
95 OAKILANDS WAY
AVOCADO AVE
628 BRIDGEWATER ABCE ROAD
我必须阅读此文件并将详细信息分配给变量以供进一步使用:
示例 -
来自文本地址的街道号码应该与'streetName'对应,
单位号应分配给'unitNumber'等
我有模式匹配器,如果字符串中有特定的细节,它可以识别值:
Pattern p1 = Pattern.compile("([0-9]+\\s+[aA-zZ])+.*");
Matcher m1 = p1.matcher(str);
while (m1.find()) {
String __tmp = m1.group();
printer = __tmp;
}
System.out.println("Street : " + printer);;
ex: - 4,75 GREAT STREET:从这个文本地址,上面的算法能够将“75 GREAT”识别为街道,但街道地址前面的数字“4”应该被标识为单位/平面/等等,无论天气如何,“4”与“单位”/“平坦”等相结合
我添加了一个模式匹配来获取街道地址之前的数字,如:
Pattern p2 = Pattern.compile("([0-9])");
Matcher m2 = p2.matcher(str);
Pattern p3 = Pattern.compile("([,])");
Matcher m3 = p3.matcher(str);
while (m2.find() & m3.find()) {
String __tmp = m2.group();
printer = __tmp;
}
System.out.println("Unit : " + printer);
这使我的输出为:
Street : 75 GREAT STREET
Unit : 4
但是,当我附加“unit”或“flat”等时,此算法无效。有人可以为此解决方案吗?
答案 0 :(得分:0)
我会使用更灵活的两步算法:
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
br.close();
在XML文件的帮助下,我会在其中添加用于从处理行中提取所需信息的各种正则表达式。
我的文件看起来像这样:
<address-templates>
<address name="type1">
<!-- The regex of this first type of address -->
<regex><![CDATA[UNIT\s+(\d+),(.+)]]></regex>
<!-- The capturing groups position of the various known parts -->
<groups>
<group name="unit" pos="1"/>
<group name="street" pos="2"/>
...
</groups>
</address>
<address name="type2">
<!-- The regex of this second type of address -->
<regex><![CDATA[(\d+)\s+(.+)]]></regex>
<!-- The capturing groups position of the various known parts -->
<groups>
<group name="unit" pos="1"/>
<group name="street" pos="2"/>
...
</groups>
</address>
...
</address-templates>
然后在我的代码中,我将解析上面的小配置文件,并针对每个地址模板检查我的line
。稍后,如果出现新的地址模板,我只会更新我的小配置文件。