通常、何らかの形式のアドレスが含まれる紛らわしい文字列があります。コーナーアドレスの場合、アドレスの最初にCNRがあるため簡単なので、次の正規表現を使用できます(vbで作業しています.ネット):
ケース 1 Instr CNR: Regex = New Regex("( CNR )(.*?)(?=\SVSE| M | SVC | SVSW | SVNE |SVNW )", RegexOptions.RightToLeft)
通常、文字列の末尾にはマップ リファレンスがあり、これは末尾が探しているものであり、アドレスを抽出することができます。この住所を取得したら、緯度と経度を決定するために住所をジオコーディングする予定です。
ただし、場合によっては、住所がなく、住所がその時点以降であることを示唆するフレーズが文字列に含まれていることがあります。たとえば、FIRE NOW OUT JOHN ST SUBURB M 215 G2 などです。この場合、以下の正規表現を使用します。
ケース 2 CNR なし: Regex = New Regex("( ([\d]+) | ([\d]+-[\d]+) | ([\d]+ - [\d]+) | 車のくすぶり| 入力 | オフ | 反対 | CNR | スパーク | INCIC1 | INCIC3 | STRUC1 | STRUC3 | G&SC1 | G&SC3 | ALARC1 | ALARC3 | NOSTC1 | NOSTC3 | RESCC1 | RESCC3 | HIARC1 | HIARC3 | 車の事故 - 閉じ込められた人員を発見 | 爆発音が聞こえた | WASHAWAY AS A RESULT OF ACCIDENT | ENTRANCE | ENT | LHS | RHS | 電源ラインのアーク放電と火花 | ファンからの煙 | 車の火災 | 火災報知器の作動 | ガス漏れ | ガス管 | 出火 | 事故 | 喫煙 | 屋根 | ガス | 要| 火災 | 車に閉じ込められた | 煙が立ち上る | 単独の自動車事故 | 事故 | 火災)(.*?)(?=\SVSE| M | SVC | SVSW | SVNE | SVNW )", RegexOptions.RightToLeft)
すべての場合において、私は右から左に作業し、文字列の前の部分がいつ見つかったかを確認してから、最初からマップ参照の直前まで取得したいと考えています。ただし、私の質問は、上記の (ケース 2) 正規表現を使用してフレーズを検索する方法ですが、他のフレーズを含めたい場合は含めないでください。たとえば、文字列に番地がある場合、抽出された文字列にその番号を含めたいのですが、必要な場合はそれを抽出したくありません。2つの例を挙げます
A: 特殊器具タイプ A 必須 例 ST SUBURB M 215 G5 B: 住宅火災 123 例 ST SUBURB M 215 G5
A の場合、REQUIRED は住所の一部ではないため、抽出した住所に正規表現を含めたくありません。文字列 EXAMPLE ST SUBURB として出力されます。
ケース B では、通りの住所が存在するため除外したくないので、抽出された住所は 123 EXAMPLE ST SUBURB になります。
問題は上記の正規表現にあります。フレーズ間の文字列を抽出し、場合によってはフレーズを含め、他の場合には除外するにはどうすればよいですか?
このような大きな質問で申し訳ありません。十分な情報を提供したかったのです。最後の質問は、正規表現を使用すると、最初の部分が一致する場所 (文字列の長さなど) を特定できるかどうかです。たとえば、上記の必須部分では、REQUIRED が表示されてから 35 文字であり、正規表現は文字列 EXAMPLE ST を抽出します。郊外。正規表現で最初に一致した位置を返すようにして、文字列から追加情報を抽出できるようにすることはできますか (たとえば、文字列の先頭から正規表現の位置 A が抽出するまで: SPECIAL APPLIANCE TYPE-A REQUIRED)。
ご協力いただきありがとうございます!