我有地址需要清理以便进行匹配。 部分过程是从家庭数量中修剪不必要的东西,例如:
mainstreet 4a --> mainstreet 4.
但我不想要:
618 5th Ave SW --> 618 5 Ave SW
换句话说,有一些字符串(现在:st,nd,rd,th)我不想剥离。 这样做的最佳方法是什么(正则表达式或其他方式)?
没有例外情况的wroring正则表达式将是:
a = a.replaceAll("(^| )([0-9]+)[a-z]+($| )","$1$2$3"); //replace 1a --> 1
我考虑首先使用特殊字符搜索和替换特殊情况,同时将参考保留在地图中,然后执行上述正则表达式,然后使用参考映射执行反向替换,但我正在寻找更简单的解决方案。
由于
答案 0 :(得分:0)
你可以用负向前瞻来做这件事:
a = a.replaceAll("(^| )([0-9]+)(?!th|nd|etc)[a-z]+($| )","$1$2$3"); //replace 1a --> 1
或者使用负向前瞻/后视:
a = a.replaceAll("(?<=^| )([0-9]+)(?!th|nd|etc)[a-z]+(?= |$)", "$1"); //replace 1a --> 1 but not 2nd --> 2