我需要检查一个字符串是否是一个有效的SHA1字符串
'418c1f073782a1c855890971ff18794f7a298f6d'
Run Code Online (Sandbox Code Playgroud)
我不知道那个规则,例如一个数字和一个字母是必须的吗?或者最少数量或字母数?
任何人都可以建议任何正则表达式匹配python?
mVC*_*Chr 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
Run Code Online (Sandbox Code Playgroud)
使用这个正则表达式:
\b[0-9a-f]{40}\b
Run Code Online (Sandbox Code Playgroud)
因为它是一个正好有 40 个字符的十六进制字符串。您也可以按照下面另一个答案中的建议将其转换为整数,但是,这是正则表达式解决方案。
一个例子:
import re
pattern = re.compile(r'\b[0-9a-f]{40}\b')
match = re.match(pattern, '418c1f073782a1c855890971ff18794f7a298f6d')
print match.group(0) # 418c1f073782a1c855890971ff18794f7a298f6d
Run Code Online (Sandbox Code Playgroud)