使用正则表达式从消防寻呼机消息中提取地址

时间:2014-06-15 02:30:50

标签: regex parsing

我运行的VB.NET程序接收火灾寻呼机消息(我是一名志愿者),该程序的一个功能是尝试从消息中提取地址。如果我很幸运,消息将被编码为前面的前缀(例如LOC)然后是地址,但是我不幸运,格式一直在变化,所以我需要尝试提出一个正则表达式这涵盖了大多数地址格式。

所有消息的结尾格式相同,通常是melways引用(M按页面和网格引用继续)或其他一些地图,所以我有我的终点(?=SV[NCSEWV]| M |SVVB)和我希望消息在该点之前开始(因为这个原因,我从右向左跑)。

消息的开头有所不同,如果我很幸运,它是一个角落地址并且有CNR或街道号码,在这种情况下我可以使用(CNR|ASSEMBLE AT|(([\d]+/[\d]+)|([\d]+ / [\d]+)|([\d]+-[\d]+)|([\d]+ - [\d]+)|( [\d]+ )))并在中间使用{{1 }}

所以我感到困惑的是,在我的正则表达式示例中,它不起作用,我想尝试优先考虑先尝试这个,然后接下来的事情,然后接下来的事情,但我不能得到这个工作。

这些是带地址的示例消息(我已将地址更改为随机街道)。

.*?

所以当我在最底层使用我的正则表达式时,只有前三个工作,而后三个不工作。我希望我能得到正则表达式的是:

  • 如果是街道号码或ALERT F1234567 PKHM2 STRUC1 BURNING SMELL INSIDE HOUSE 19 THIS ROAD BVD SUBURB /NEAREST ST CR M 123 B8 (660846) ALERT F1234567 PKHM2 STRUC1 HOUSE FULL OF SMOKE 7 EXAMPLE CT SUBURB /CROSSRD1 BVD //CROSSRD2 CCT M 123 K10 (653837) ALERT F1234567 PKHM2 NOSTC1 CAR FIRE CNR EXAMPLE1 CL/EXAMPLE2 WAY SUBURB M 123 J6 (646853) ALERT F1234567 PKHM1 STRUC1 FACTORY FIRE EXAMPLE RD SUBURB M 123 J11 (686833) ALERT F1234567 PAKU5 STRUC1 BBQ AREA ON FIRE EXAMPLE RD SUBURB M 123 G7 (677948) ALERT F1234567 SFLD3 G&SC1 COLUMN OF SMOKE ISSUING EXAMPLE RD SUBURB SVC 1234 H3 (075622) ,请将地址(不包括地图参考)带到CNR或街道号码,例如在第一个例子中,这将是:CNR

  • 如果不存在,但其他一个短语是(例如19 THIS ROAD BVD SUBURB /NEAREST ST CR),则取不包含该短语的地址和地图参考。因此,来电FIRE将成为ALERT F1234567 PKHM1 STRUC1 FACTORY FIRE EXAMPLE RD SUBURB M 123 J11 (686833)

我很好奇的另一件事是我可以把它作为有三个或更多选项的东西,所以如果它存在则采用正则表达式1,如果不存在则采用正则表达式2,那么如果不采用正则表达式3存在。

所以例如,如果我有EXAMPLE RD SUBURB这样的调用,第一个正则表达式会查找123(或CNR),如果找到它包含在返回的正则表达式中,那么如果它不存在则查找ALERT F1234567 PKHM1 STRUC1 FACTORY FIRE 123 EXAMPLE RD SUBURB M 123 J11 (686833)但不包含在返回的正则表达式中,然后如果找不到它,它会查找(FACTORY FIRE|GAS LEAK|EXAMPLE 1|EXAMPLE 2|EXAMPLE 3),并且不会在返回的正则表达式中包含它。

  • 因此,上述(STRUC[13]|INCIC[13])的示例1返回ALERT F1234567 PKHM1 STRUC1 FACTORY FIRE 123 EXAMPLE RD SUBURB M 123 J11 (686833)

  • 上述123 EXAMPLE RD SUBURB的示例2返回ALERT F1234567 PKHM1 STRUC1 FACTORY FIRE EXAMPLE RD SUBURB M 123 J11 (686833)

  • 以上EXAMPLE RD SUBURB的示例3。

正则表达式:

  

ALERT F1234567 PKHM1 STRUC1 EXAMPLE RD SUBURB M 123 J11 (686833) returns EXAMPLE RD SUBURB

0 个答案:

没有答案