4

ファジー文字列マッチングを可能にする新しい python regexモジュールをテストしており、これまでのところその機能に感銘を受けています。ただし、あいまい一致で特定の例外を作成するのに問題がありました。以下はその一例です。、および編集距離 1 以内のST LOUISすべてのバリエーションが一致するようにします。ただし、この規則には 1 つの例外を設けたいと思います。編集は、文字、、、または. 次の例では、入力 1 ~ 3 を ref に一致させ、入力 4 を失敗させます。ただし、以下を使用してST LOUISrefNSEWref4 つの入力すべてに一致させます。新しい正規表現モジュールに精通している人は、可能な回避策を知っていますか?

input1 = 'ST LOUIS'
input2 = 'AST LOUIS'
input3 = 'ST LOUS'
input4 = 'NST LOUIS'


ref = '([^NSEW]|(?<=^))(ST LOUIS){e<=1}'

match = regex.fullmatch(ref,input1)
match
<_regex.Match object at 0x1006c6030>
match = regex.fullmatch(ref,input2)
match
<_regex.Match object at 0x1006c6120>
match = regex.fullmatch(ref,input3)
match
<_regex.Match object at 0x1006c6030>
match = regex.fullmatch(ref,input4)
match
<_regex.Match object at 0x1006c6120>
4

1 に答える 1

4

代わりにネガティブな先読みを試してください。

(?![NEW]|SS)(ST LOUIS){e<=1}

(ST LOUIS){e<=1}配置されたファジー条件を満たす文字列に一致します。で始まらないようにし[NSEW]ます。ネガティブな先読みはあなたのためにそれを行います(?![NSEW])。ただし、目的の文字列はすでにで始まります。文字列の先頭に追加されSた文字列で始まる文字列のみを除外する必要があります。Sこのような文字列はで始まりSSます。そのため、負の先読みに追加されます。

1を超えるエラーを許可すると、これはおそらく期待どおりに機能しないことに注意してください。

于 2013-02-04T17:36:07.113 に答える