2017-05-04 3 views
0

周り{}文字列を書式設定します私はこの機能を使用する場合:私はハッシュ検証正規表現のを作成する機能を有する特定のインスタンス

md5 = build_re(32) 
print md5.match("098f6bcd4621d373cade4e832627b4f6") 
>>> None 
len("098f6bcd4621d373cade4e832627b4f6") 
>>> 32 

をそれは確かに32文字のハッシュ文字列と一致する必要があり、私はそれを手動で行う場合:

>>> hash_regex = "^[a-f0-9]{32}(:.+)?$" 
>>> test_string = "098f6bcd4621d373cade4e832627b4f6" 
>>> data = re.compile(hash_regex) 
>>> data.match(test_string) 
<_sre.SRE_Match object at 0x02ABB4E0> 
>>> if data.match(test_string): 
    print "matched"  
matched 
機能ビルド正規表現で 32は約 {}を持っていないため "^[a-f0-9]32(:.+)?$" == "^[a-f0-9]{32}(:.+)?$"Falseです:何かを証明していなかった

>>> def build_re(hex_len, prefix=r"", suffix=r"(:.+)?"): 
     regex_string = r"^{}[a-f0-9]{}{}$".format(prefix, hex_len, suffix) 
     print regex_string 
     return re.compile(regex_string, re.IGNORECASE) 

>>> build_re(32) 
^[a-f0-9]32(:.+)?$ 
<_sre.SRE_Pattern object at 0x029D89E0> 
>>> 

が、その後、私は気づい:

10は、だから私はそれを引き起こしている接頭辞です多分思いましたそれ。だから私の質問は、これは、.format関数を使用して文字列をフォーマットし、その文字列の特定のインスタンスの周りに中かっこを供給することができますか?私はこれを試してみなければ、私が取得:

>>> def build_re(hex_len, prefix=r"", suffix=r"(:.+)?"): 
     regex_string = r"^{}[a-f0-9]{{}}{}$".format(prefix, hex_len, suffix) 
     print regex_string 
     return re.compile(regex_string, re.IGNORECASE) 

>>> build_re(32) 
^[a-f0-9]{}32$ 
<_sre.SRE_Pattern object at 0x02A40740> 
>>> 

が、これはdeprecared %dメソッドを使用せずに、正常に行うことができますか?

+0

*あなたの質問からすべての無関係な情報を削除し、*「どのように私は '中括弧{}を含む文字列に.format'を使うことができますか?」にそれを短くしてください。 –

+0

@ラウリング私は結論に達した方法を示しているだけです。 – oaq25955

+0

あなたは簡単な質問があります。なぜこの巨大なテキストの壁にそれを膨張させるのですか?あなたが結論に至ったのは完全に無関係です。それは私たちがあなたの問題を解決するのに役立つわけではありません。もっと読むように強制するだけで、あなたの質問を理解するのは難しいです。 –

答えて

0

3つのブレース{{{}}}を使用する必要があります。外側の2つの中かっこは、結果としてリテラル{}を生成し、内側の中括弧はhex_lenに置き換えられます。

regex_string = r"^{}[a-f0-9]{{{}}}{}$".format(prefix, hex_len, suffix) 
関連する問題