2016-12-02 18 views
0

次のコードスニペットがfalseを返す理由はわかりません。特殊文字はエスケープする必要があることを理解していますが、re.escape()は既にそうしています。正規表現はPythonの特殊文字と一致しません

import re 

string = re.escape('$') 
pattern = re.compile(string) 
print(bool(pattern.match(string))) 
+1

文字列の先頭から一致すると見なされます。あなたの文字列は '\ $'、 '\'は '$'ではありません。 –

+0

@SebastianProske私は笑を理解していません。私はパターンと文字列を一致させるために同じ文字列を使用しました。 – latenightcode

+0

正規表現 '\ $'は文字列 '$'にマッチしますが、あなたの文字列は '$'で始まっていません。 –

答えて

1

間違ったエスケープです。検索する文字列を変更する必要はありません。しかし、あなたが文字通り一致させるパターンに含める文字列はそうです。ここ

import re 

string = '$' 
pattern = re.compile(re.escape(string)) 
print(bool(pattern.match(string))) 

、パターン\$$リテラル一致)文字列"$"と照合し、成功しています。あなたの例では

、パターン\$$リテラル試合は)文字列"\$"(Pythonでr"\$"または"\\$")と照合し、matchは文字列全体をカバーするパターンを必要とするため失敗し、バックスラッシュは比類のないままにされています。

関連する問題