python的SHA1字符串正则表达式
我需要检查字符串是否为有效的SHA1字符串,如python的SHA1字符串正则表达式,python,regex,sha1,Python,Regex,Sha1,我需要检查字符串是否为有效的SHA1字符串,如 '418c1f073782a1c855890971ff18794f7a298f6d' 我不知道这方面的规则,例如一个数字和一个字母是否是必须的?或者最少有多少个数字或字母 有人能建议任何正则表达式在python中进行匹配吗 我认为避免使用正则表达式更快。SHA1是一个随机的40位十六进制数,因此,如果无法将其转换为十六进制且长度不是40个字符,则它不是SHA1: def is_sha1(maybe_sha): if len(maybe_
'418c1f073782a1c855890971ff18794f7a298f6d'
我不知道这方面的规则,例如一个数字和一个字母是否是必须的?或者最少有多少个数字或字母
有人能建议任何正则表达式在python中进行匹配吗 我认为避免使用正则表达式更快。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
使用此正则表达式:
\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
我喜欢这个。非常聪明!对控制流使用try-catch块不应该是一种反模式吗?诚实的问题,不是批评,只是尝试学习。@slashCoder我不知道,我是一个灰胡子,但它更有效。在python中,特别是有一个风格原则“请求原谅比允许更容易”,一些人实际上将不使用try-except标记为反模式,但对此持保留态度。其他社区对这个想法不那么热心。相当酷!这比使用python 3.7.7的Mac上的正则表达式(即使事先编译了模式)的性能高5倍左右。