0
我將創建哈希驗證的正則表達式的功能:格式化一個字符串{}圍繞一個特定的實例
import re
def build_re(hex_len, prefix=r"", suffix=r"(:.+)?"):
regex_string = r"^{}[a-f0-9]{}{}$".format(prefix, hex_len, suffix)
return re.compile(regex_string, re.IGNORECASE)
此功能應採取的哈希(098f6bcd4621d373cade4e832627b4f6
爲例)的長度並驗證它然而,當我使用這個功能:
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
所以我想也許這是導致它的前綴:
>>> 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>
>>>
這並不能證明什麼,然後我注意到:"^[a-f0-9]32(:.+)?$" == "^[a-f0-9]{32}(:.+)?$"
是False
因爲在功能構建正則表達式的32
沒有{}
各地它。所以我的問題是,我如何使用.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
方法呢?
請刪除所有與您的問題無關的信息,並將其縮短爲*「如何在包含大括號的字符串中使用'.format'?」*。 –
@Rawing我只是展示了我如何得出結論 – oaq25955
你有一個簡單的問題;爲什麼誇大它到這個怪異的文本牆?你如何得出結論完全無關緊要。它不會幫助我們解決您的問題,它只會迫使我們閱讀更多內容,並讓您的問題更加容易理解。 –