用于python

时间:2015-08-26 18:33:56

标签: python regex sha1

我需要检查一个字符串是否是一个有效的SHA1字符串,比如

 '418c1f073782a1c855890971ff18794f7a298f6d'

我不知道有关的规则,例如数字和字母是否必须?或者最少数量或字母?

有人可以建议任何正则表达式在python中匹配吗?

2 个答案:

答案 0 :(得分:10)

我认为避免使用正则表达式会更快。 SHA1是一个随机的40位十六进制数,所以如果你不能将它转换为十六进制并且长度不是40个字符,那么它不是SHA1:

def is_sha1(maybe_sha):
    if len(maybe_sha) != 40:
        return False
    try:
        sha_int = int(maybe_sha, 16)
    except ValueError:
        return False
    return True

答案 1 :(得分:4)

使用此正则表达式:

\b[0-9a-f]{40}\b

因为它是一个十六进制字符串,正好有40个字符。您也可以将其转换为整数,如下面另一个答案所示,但是,这是正则表达式解决方案。

一个例子:

import re
pattern = re.compile(r'\b[0-9a-f]{40}\b')
match = re.match(pattern, '418c1f073782a1c855890971ff18794f7a298f6d')
print match.group(0)  # 418c1f073782a1c855890971ff18794f7a298f6d