我正在尝试编写一个正在获取哈希值的正则表达式,我有以下正则表达式捕获MD5哈希值
[0-9a-fA-F].{32}
但是,这也将获得更长字符串的前32个字符,例如SHA-1哈希。我想知道如何编辑它以确保它只匹配字符串是32个字符长而不是40个字符?
编辑:对不起,我应该说我使用的是Python 2.7答案 0 :(得分:3)
要将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
答案 1 :(得分:2)
你的正则表达式中有一点(但都是重要的)错误 - [0-9a-fA-F].{32}
匹配一个十六进制字符,然后匹配32个任何字符(换行符除外)。因此,您的模式应为[0-9a-fA-F]{32}
要检查整个字符串是否匹配,您可以使用re.fullmatch
(added in Python 3.4)或使用锚点^
(字符串的开头)和$
(结束字符串)
答案 2 :(得分:1)
你能粘贴一些示例字符串(长度分别为32和40)吗?
如果没有示例,我可以考虑使用^
和$
来匹配字符串的开头和字符串的结尾,如Python re tutorial中所述。
示例:
^[0-9a-fA-F]{32}$