我需要检查一个字符串是否是一个有效的SHA1字符串,比如
'418c1f073782a1c855890971ff18794f7a298f6d'
我不知道有关的规则,例如数字和字母是否必须?或者最少数量或字母?
有人可以建议任何正则表达式在python中匹配吗?
答案 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