正規表現を生成するコードがいくつかあります。実際、次の式は次のとおりです。
^(?:\s*((exclude|include|hide|show|protect|risk|dir-merge|merge)),\s*((-|+|H|S|P|R|:|.))\s*(\S+)|\s*,?\s*((-|+|H|S|P|R|:|.))\s*(\S+)|\s*((exclude|include|hide|show|protect|risk|dir-merge|merge))\s*(\S+))$
複雑に見えますが、基本的には、ファイル内の次の行に一致することを意味します。
dir-merge, : /some/file
merge, . /some/other/file
. /another/file
, : /yet/another/file
したがって、\s*
Python regex コンパイル エラーの原因となっている一致です。
のブロックを一致させずに、単一の式でこれらの組み合わせを一致させるより良い方法はありnothing
ますか?
回答済み
答えに加えて、代わりに次の式を作成することでこれを解決したことに言及する価値があります。
^(?:\s*(exclude|include|hide|show|protect|risk|dir-merge|merge),\s*([-+HSPR:.])\s*(\S+)|\s*,?\s*([-+HSPR:.])\s*(\S+)|\s*(exclude|include|hide|show|protect|risk|dir-merge|merge)\s*(\S+))$
小さな違いは、 から(-|+|H|S|P|R|:|.)
への移行([-+HSPR:.])
です。角括弧には、文字をエスケープする効果があり、|+
式の一致を防ぎnothing
ます。