精确字符串长度的Python正则表达式
我正在尝试编写一个正则表达式,它将获得一个哈希值。目前,我有以下正则表达式,它捕获MD5哈希值精确字符串长度的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
[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)