0

通常、何らかの形式のアドレスが含まれる紛らわしい文字列があります。コーナーアドレスの場合、アドレスの最初に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)。

ご協力いただきありがとうございます!

4

1 に答える 1

1

質問の一部を取得しました.match.indexとmatch.lengthを使用すると、文字列が実際に終了した場所(位置など)を特定でき、そこから必要な部分を実行できます。

私が解決できなかった唯一のビットは、以下のような正規表現の例を使用し、CNR が見つかった場合に返される文字列 (正規表現の一致など) に CNR を含める方法ですが、STREET1 または ROAD1 は含めません。

Regex = New Regex("( CNR ||)(.*?)(?=\SVSE| M | SVC | SVSW | SVNE |SVNW )", RegexOptions.RightToLeft)

たとえば、文字列が「EXAMPLE TEXT CNR 123 STREET A SUBURB M 215 G2」の場合、CNR 123 STREET A SUBURB が返されますが、文字列が「EXAMPLE TEXT STREET1 STREET A SUBURB M 215 G2」の場合、STREET A SUBURB\ が返されます。

ただし、上記の例のSTREET1は正規表現が開始/終了するポイントですが、STREET Aは別のフレーズである可能性があるため、一致に含まれていないことを指摘する必要があります.STREET Aを探すことはできません.

ありがとう!

于 2013-10-24T05:52:07.903 に答える