2016-11-22 4 views
-1

私はこのパターンを持っていて、このwindowsのファイル名と一致させたいと思います。無実を保護するために名前が変更されました:[a-zA-Z] +はアルファベットの連続する文字に置き換えられました。PythonのRegexpは、バックスラッシュで失われています。

pattern = "C:\\\\a\\\\b\\\\c\\\\d\\\\e f\\\\(g|h|i)\\\\j k\\\\l\\\\m\\\\(n\\\\(o|p)|q)\\\\.*\.sql)" 

str = "C:\\a\\b\\c\\d\\e f\\h\\j k\\l\\m\\n\\o\\z_zz.function.sql" 

しかし、pythonは、比類のないparenについて不平を言っています。どうしてか分かりません。それが私に与えているポジション(62)も、私の括約書と一線を画していませんが、私が推測しなければならないことは、たくさんのバックスラッシュのどれかが誤ってエスケープしていると言うことです。 。。に、しかし、助けていないものを目の前に多くのバックスラッシュを追加するあなたのバックスラッシュはすべて適切にエスケープされている

+0

ヒント:必要なバックスラッシュの数を減らすために、 "生の"文字列記法を使用することができます。例えば。 'r'C:\ a \ b'' ==' C:\\ a \\ b'' – Billy

+0

リテラルのバックスラッシュを処理する必要がある場合は、生の文字列リテラルを使用します。 –

+0

私はもともと、s、d、wで始まるパスから生じる混乱のためにそれを避けました... –

答えて

0

位置は、それが(62)は括弧で試合を行い与え、最後のものは具体的には:

>>> pattern = "C:\\\\a\\\\b\\\\c\\\\d\\\\e f\\\\(g|h|i)\\\\j k\\\\l\\\\m\\\\(n\\\\(o|p)|q)\\\\.*\.sql)" 
>>> pattern[62] 
')' 
>>> len(pattern) 
63 

だから、あなたはあなたのgroupがあること、またはあなたのパターンから最後の括弧を削除する左括弧とその右括弧に一致する。

+0

うわー、それはとても明らかです。ありがとう! –

関連する問題