Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python的SHA1字符串正则表达式_Python_Regex_Sha1 - Fatal编程技术网

python的SHA1字符串正则表达式

python的SHA1字符串正则表达式,python,regex,sha1,Python,Regex,Sha1,我需要检查字符串是否为有效的SHA1字符串,如 '418c1f073782a1c855890971ff18794f7a298f6d' 我不知道这方面的规则,例如一个数字和一个字母是否是必须的?或者最少有多少个数字或字母 有人能建议任何正则表达式在python中进行匹配吗 我认为避免使用正则表达式更快。SHA1是一个随机的40位十六进制数,因此,如果无法将其转换为十六进制且长度不是40个字符,则它不是SHA1: def is_sha1(maybe_sha): if len(maybe_

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

 '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倍左右。