Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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正则表达式_Python_Regex_Python 2.7 - Fatal编程技术网

精确字符串长度的Python正则表达式

精确字符串长度的Python正则表达式,python,regex,python-2.7,Python,Regex,Python 2.7,我正在尝试编写一个正则表达式,它将获得一个哈希值。目前,我有以下正则表达式,它捕获MD5哈希值 [0-9a-fA-F].{32} 但是,这也将获得较长字符串(如SHA-1哈希)的前32个字符。我想知道如何编辑它,以确保它仅在字符串长度为32个字符而不是40个字符时匹配 编辑:对不起,我应该说我正在使用Python2.7作为一个整体来匹配md5哈希字符串,使用字符串的开始/结束锚点^,$: s = "3b4e1a15682994ef0bb2cbea8abfa105" result = re.se

我正在尝试编写一个正则表达式,它将获得一个哈希值。目前,我有以下正则表达式,它捕获MD5哈希值

[0-9a-fA-F].{32}
但是,这也将获得较长字符串(如SHA-1哈希)的前32个字符。我想知道如何编辑它,以确保它仅在字符串长度为32个字符而不是40个字符时匹配


编辑:对不起,我应该说我正在使用Python2.7作为一个整体来匹配md5哈希字符串,使用字符串的开始/结束锚点
^
$

s = "3b4e1a15682994ef0bb2cbea8abfa105"
result = re.search(r'^[0-9a-fA-F]{32}$', s)

print result.group()   # 3b4e1a15682994ef0bb2cbea8abfa105

要将md5哈希匹配为子字符串(文本的一部分),请使用单词边界
\b

s = "hash 3b4e1a15682994ef0bb2cbea8abfa105 some text"
result = re.search(r'\b[0-9a-fA-F]{32}\b', s)

print result.group()    # 3b4e1a15682994ef0bb2cbea8abfa105
您的正则表达式中有一个小错误(但非常重要)-
[0-9a-fA-F]。{32}
匹配一个十六进制字符,然后匹配任何字符中的32个(换行符除外)。因此,您的模式应该是
[0-9a-fA-F]{32}


要检查整个字符串是否匹配,可以使用
re.fullmatch
()或使用锚点
^
(字符串的开头)和
$
(字符串的结尾)

是否可以粘贴一些示例字符串(长度分别为32和40)

如果没有这个示例,我可以考虑使用
^
$
来匹配字符串的开头和结尾,如中所述

例如:

^[0-9a-fA-F]{32}$

使用锚定(
^[0-9a-fA-F]{32}$
)或
re.fullmatch
为什么在这里使用点?@Dmitry:这将匹配当前状态下的33个字符(Sebastian更新了他的注释:)。以下是哈希长度32(MD5)和40(SHA-1)的一些示例。9c3aec2376f1052a95d8de480a37572f,566dd7d858598375eaa7f468379447c673d934e2@user7399815,这确实是一种奇怪的行为,但它将128位哈希与
re.search(r'\b[0-9a-fA-F]{127}\b',s)