正则表达式:修剪所有直接以数字开头的字符串,除非字符串属于预定义的字符串集

时间:2010-05-07 09:48:25

标签: java regex

我有地址需要清理以便进行匹配。 部分过程是从家庭数量中修剪不必要的东西,例如:

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

我考虑首先使用特殊字符搜索和替换特殊情况,同时将参考保留在地图中,然后执行上述正则表达式,然后使用参考映射执行反向替换,但我正在寻找更简单的解决方案。

由于

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