我有一个令人困惑的字符串,通常有一些地址的形式,在某些情况下,它是一个角落地址很容易,因为地址有一个CNR在开始,所以我可以使用以下正则表达式(我正在vb.net工作):字符串和位置之间的正则表达式
案例1 Instr CNR:Regex = New Regex(“(CNR)(。*?)(?= \ SVSE | M | SVC | SVSW | SVNE | SVNW) “,RegexOptions.RightToLeft)
在字符串的末尾通常是一个地图引用,这是最终寻找什么,然后允许我提取地址。一旦我有了这个地址,我计划对地址进行地理编码,以确定纬度和经度。
但是在某些情况下没有地址,并且该字符串可能包含一些短语,这些短语暗示地址在该点之后,例如现在熄灭约翰ST SUBURB M 215 G2。如果是这种情况,我使用下面的正则表达式:
Case 2 No CNR:Regex = New Regex(“(([\ d] +)|([\ d] + - [\ d] +)|( [| d] + - [\ d] +)| CAR SMOLDERING | INPUT | OFF | OPPOSITE | CNR | SPARK | INCIC1 | INCIC3 | STRUC1 | STRUC3 | G & SC1 | G & SC3 | ALARC1 | ALARC3 | NOSTC1 | NOSTC3 | RESCC1 | RESCC3 | HIARC1 | HIARC3 |车祸 - 受伤人员|爆炸声|事故原因|事故处理|入口| ENT | LHS | RHS |电源线ARCING AND SPARKING |烟囱冒烟|汽车火警|火警警报操作| |气体泄漏|气管|现在熄灭|事故|吸烟|屋顶|气体|要求|火灾|汽车上锁|烟雾崛起|单车事故|事故|火灾(。*?)(?= \ SVSE | M | SVC | SVSW | SVNE | SVNW)“,RegexOptions.RightToLeft)
在所有情况下,我从右到左工作,期待看到字符串的前部分何时被找到,然后我想从开始直到地图参考之前。然而,我的问题是,如何使用上述(案例2)正则表达式并查找一个短语,但不包括它,当我可能要包括其他人。例如,如果字符串有一个街道号码,那么我想包括在提取的字符串中的数字,但如果它已经是必需的,那么我不想提取那个。我将举两个例子
答:特别器具TYPE-A REQUIRED例ST郊区中号215 G5 B:住宅火灾123实施例ST郊区中号215 G5
在情况A中,需要的是不是地址的一部分,所以我不希望正则表达式将它包含在提取的地址中,并且它将以字符串形式输出。例子ST SUBURB。
在案例B中,由于存在街道地址,我不想排除这一点,所以提取的地址将为123 EXAMPLE ST SUBURB。
所以问题是在上面的正则表达式中,我怎样才能提取短语之间的字符串,并在某些情况下包括短语,并排除在其他人?
对不起,我想确保我提供了足够的信息。 最后一个问题是,regex是否允许你计算第一部分匹配的位置(例如字符串的长度),例如在上面的REQUIRED部分中,在REQUIRED出现后是35个字符,并且正则表达式提取字符串EXAMPLE ST SUBURB。我可以让正则表达式返回第一个匹配的位置,所以我可以从字符串中提取附加信息(例如,从字符串的开头,直到正则表达式位置A提取:特殊电器类型-A要求)。
感谢您的帮助!