我想寫一個正則表達式,將得到一個哈希目前我有以下的正則表達式來捕獲MD5散列Python正則表達式的確切字符串長度
[0-9a-fA-F].{32}
然而,這也將得到的前32個字符一個更長的字符串,如SHA-1哈希。我想知道如何編輯這個以確保它只匹配字符串長度爲32個字符而不是40個字符?
編輯:對不起,我應該說我使用Python 2.7
我想寫一個正則表達式,將得到一個哈希目前我有以下的正則表達式來捕獲MD5散列Python正則表達式的確切字符串長度
[0-9a-fA-F].{32}
然而,這也將得到的前32個字符一個更長的字符串,如SHA-1哈希。我想知道如何編輯這個以確保它只匹配字符串長度爲32個字符而不是40個字符?
編輯:對不起,我應該說我使用Python 2.7
要匹配MD5散列整個字符串使用開始/結束的字符串錨^
,$
:
s = "3b4e1a15682994ef0bb2cbea8abfa105"
result = re.search(r'^[0-9a-fA-F]{32}$', s)
print result.group() # 3b4e1a15682994ef0bb2cbea8abfa105
要匹配md5哈希作爲子字符串(部分文本)使用字邊界\b
:
s = "hash 3b4e1a15682994ef0bb2cbea8abfa105 some text"
result = re.search(r'\b[0-9a-fA-F]{32}\b', s)
print result.group() # 3b4e1a15682994ef0bb2cbea8abfa105
@ user7399815,這真是奇怪的行爲,但它會匹配128位哈希與're.search(r'\ b [0-9a-fA-F] {127} \ b',s)' – RomanPerekhrest
在你的正則表達式中有一點(但是重要的)錯誤 - [0-9a-fA-F].{32}
匹配一個十六進制字符,然後匹配32個任意字符(除了換行符)。因此,你的模式應該是[0-9a-fA-F]{32}
要檢查整個字符串匹配您可以使用re.fullmatch
(added in Python 3.4),或使用錨^
(字符串的開始)和$
(字符串的結束)
謝謝你,使用錨正在工作! – user7399815
你能粘貼一些示例字符串(每個長度爲32和40)?
沒有這個例子,我可以想到利用^
和$
匹配字符串的開頭和字符串的結尾,如Python re tutorial中所述。
例子:
^[0-9a-fA-F]{32}$
以下是散列長度爲32(MD5)&40(SHA-1)的一些示例。 9c3aec2376f1052a95d8de480a37572f, 566dd7d858598375eaa7f468379447c673d934e2 – user7399815
使用錨('^ [0-9A-FA-F] {32} $'),或者你爲什麼在這裏點用're.fullmatch' –
? – Dmitry
@Dmitry完全相同:在當前狀態下匹配33個字符(Sebastian已更新他的評論:)) –