我正在使用正则表达式来提取地址。我想做的是能够在我的代码块中使用一些正则表达式来提取地址,但在某些情况下,在返回的匹配项(例如 STREET A、CNR)和其他情况采用两点之间的所有文本,但不包括返回匹配中的点之一。
我希望有人可以帮助我构建一个正则表达式字符串,它将返回字符串中两个定义点之间的所有内容。问题是有时匹配应该包括来自正则表达式的短语(例如 CNR),而其他时候不同的短语不应该包含在匹配中(例如示例文本)。
这是一个正则表达式示例,在这种情况下,如果 STREET A 存在,它将在匹配中包含它: Regex = New Regex("( CNR| STREET A|EXAMPLE TEXT)(.*?)(?=\SVSE| M | SVC | SVSW | SVNE |SVNW )", RegexOptions.RightToLeft)
如何在上述正则表达式中使用 STREET A (或其他短语)作为标记来返回正则表达式匹配,但实际上不将其包含在匹配本身中?
谢谢!
我在下面提供了一些额外的信息,希望能有所帮助。这些是一些例子:
我已经将斜体作为匹配标准的任何内容,然后我制作的粗体项目是应该匹配的,这些只是几个例子,但实际上正则表达式可以匹配很多不同的东西,因为地址并不总是 123 例子英石。
@@ALERT SMPL1 F0000000燃气管道泄漏 主高速公路郊区 SVNW 1111 A1 (375302) SMPLT1 [SMPL]
@@ALERT F0000000 SMPL1 STRUC1 烟雾报警器操作和烟雾CNR示例 ST/示例 ST 郊区SVNE 1111 D7
@@ALERT SMPL1 F0000000 车祸- 被抓获的 主要高速公路郊区 SVNW 1111 A1 (375302) SMPLT1 [SMPL]
@@ALERT F0000000 SMPL1 STRUC1气瓶爆炸 示例 ST/示例 ST 郊区 SVNE 1111 D7
- - 更多信息 - -
这就是正则表达式当前(并且有效)的内容,但是我在设法在一开始就排除多个匹配项时遇到了麻烦:
(CNR|(([\d]+/[\d]+)|([\d]+ / [\d]+)|([\d]+-[\d]+)|([\d]+ - [\d]+)|( [\d]+ ))).*?(?=SV[NCSEW]| M )|(?<=GAS PIPE LEAK).*?(?=SV[NCSEW]| M )
这就是我想尝试并实现的目标:(但无法正常工作)
(CNR|(([\d]+/[\d]+)|([\d]+ / [\d]+)|([\d]+-[\d]+)|([\d]+ - [\d]+)|( [\d]+ ))).*?(?=SV[NCSEW]| M )|(?<=(GAS PIPE LEAK|FIRE ALARM|SMOKE ALARMS|FIRE|)).*?(?=SV[NCSEW]| M )
以下是一些示例字符串:
@@ALERT F000000 BELM4 STRUC1 激活烟雾报警器 JACARANDA ST 郊区/ROAD ST M 000 K3 (000000)
@@ALERT F000000 BELM4 STRUC1 火蓝花楹 ST 郊区 /ROAD ST M 000 K3 (000000)
@@ALERT F000000 BELM4 STRUC1 爆炸 123 JACARANDA ST 郊区 /ROAD ST M 000 K3 (000000)
@@ALERT F000000 BELM4 UNDEFINED FIRE JACARANDA ST 郊区/ROAD ST M 000 K3 (000000)