問題タブ [order-of-execution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5109 参照

r - r 住所から英国の郵便番号を抽出するための正規表現が順序付けされていません

ここで英国政府が提供する正規表現を使用して、R の住所文字列から英国の郵便番号を抽出しようとしています。

これが私の機能です:

ガイダンス ドキュメントによると、この正規表現が探すロジックは次のとおりです。

"GIR 0AA" または 1 文字の後に 1 つまたは 2 つの数字が続く、または 1 つの文字の後に ABCDEFGHJ KLMNOPQRSTUVWXY (つまり、I ではない) のいずれかでなければならない 2 番目の文字が続き、その後に 1 つまたは 2 つの数字が続く、または 1 つの文字の後に 1 つが続く数字の後に別の文字または 2 部構成の郵便番号。最初の部分は 1 文字で、2 番目の文字は ABCDEFGH JKLMNOPQRSTUVWXY (つまり、I ではない) のいずれかで、その後に 1 つの数字とオプションでさらに文字が続きます。 AND 2 番目の部分 (最初の部分からスペースで区切られている) は、1 つの数字の後に 2 つの文字が続く必要があります。大文字と小文字の組み合わせが許可されています。注: 長さは正規表現によって決定され、2 ~ 8 文字です。

^私の問題は、アンカーとなしで正規表現を使用すると、このロジックが完全に保持されないこと$です (郵便番号が住所文字列内のどこにでもある可能性があるため、このシナリオで行う必要があります)。私が苦労しているのは、部分的な (完全ではなく) 文字列一致で各セグメントの順序と文字数を保持する方法です。

次の例を検討してください。

ガイドラインの論理によれば、郵便番号の 2 番目の文字を「z」にすることはできません (その他の例外もあります)。ただし、「z」を追加するとどうなるか見てください。

... 一方、この場合、出力はNA.

アンカーを追加しても(別の使用例では)、「z」が間違った場所にあるにもかかわらず受け入れられるため、役に立たないようです。

2 つの質問:

  1. 正規表現の論理を誤解していて、
  2. そうでない場合、どうすれば修正できますか (つまり、指定された文字と文字の範囲が正規表現内の位置に限定されないのはなぜですか)?