使用正则表达式修复街道名称

时间:2010-12-14 04:39:26

标签: php regex

我必须解决一个可能具体的正则表达式问题,通过堆栈溢出我已经取得了一些很好的发现,但是却无法将它们拼凑在一起以使其工作。

基本上我想要这个:

lorem ipsum north road => lorem ipsum rd (n)

north lorem ipsum rd => lorem ipsum rd (n)

lorem ipsum road north => lorem ipsum rd (n)

作为自动完成程序的一部分,我需要将部分文本转换为正确的版本,以便检查数据库

lorem ipsum so uth rd => lorem ipsum rd (s)

west lorem ipsum roa d => lorem ipsum rd (w)

我不希望有人为我编写此程序,但我想知道解决问题的最佳方法。

现在你可能会问我为什么要打扰,因为人们不会用这样的语法来写,但那是因为我不只是在处理英语:(

干杯

2 个答案:

答案 0 :(得分:3)

对我来说,最困难的一点是在正则表达式中使用正则表达式在正确的位置寻找正确的单词,因此,虽然不是很优雅,但这是一种更难以管理的方式来实现最小的正则表达式吗? :

  1. 提取所有已知单词和 他们的变化(道路类型, 方向,数字,...)来自 地址线,希望我们会留下 道路名称​​。

  2. 重新编写地址行,但是在 我们需要的订单(道路名称+道路类型+方向)。

  3. 一旦你摆脱了这个位置,可能的理论变化仍然很大,但可预测的变化不应该那么大?,甚至考虑到拼写错误:Avenue:Avenu,Avene,Aveniu,Avn,Av,Avn。 Road:Rd,Roud,Roade,Roud?

答案 1 :(得分:0)

对于你问题的第一部分,下面的伪正则表达式看起来会像你所追求的那样吗?

(<direction>?) <road name> (<direction>?) <road type> (<direction>?) 

然后检查三个可选的<direction>正则表达式中的每一个,包括您想要给它的任何条件。您需要自己提出<direction><road name><road type>正则表达式。那些正则表达式应该是具体的,例如(道路)|(RD)|(街道)|。(ST)

对于问题的第二部分(即自动完成),您可能需要索引上面提到的部分或全部正则表达式类别(即路线,道路名称和道路类型),具体取决于您想要多少-完成。