3

difflib で正規表現を使用できますか?

具体的には、次のことを行います。

difflib.context_diff(actual, gold)

実際は次のとおりです。

[master 92a406f] file modified

そして金は:

\[master \w{7}\] file modified
4

3 に答える 3

3

正規表現ベースの差分を本当に追求したい場合は、__eq__正規表現マッチングに基づいて定義する独自の文字列のようなオブジェクトを作成し、それらのオブジェクトのシーケンスで difflib を使用できます。しかし、私はそれをお勧めしません。

于 2011-07-18T15:26:47.623 に答える
3

92a406f実際のファイルの一部を無視したいという意味のようです。正規表現を使用して無視したい部分をスクラブするスクラバーを作成する必要があります。

actual = re.sub(r"\[master \w{7}\]", "[master *******]", actual)

次に、スクラブしたゴールド ファイルを保管します。次に、標準の difflib を使用して、スクラブされた実際のデータとスクラブされたゴールドを比較できます。

于 2011-07-18T15:21:02.487 に答える
2

私がやったことは次のとおりです: difflib の find_longest_match 関数をコピーに置き換えますが、== 呼び出しをチェックの呼び出しに置き換えて、物事が等しくない場合に左側を正規表現として解釈しようとします (そして、エラーが発生した場合は true を返します。たとえば、有効な正規表現でない場合)。

出力マッチングが期待される単体テストに使用していますが、これまでのところ非常にうまく機能しています。

于 2012-08-22T15:49:56.603 に答える