我正在尝试编写一个正则表达式来获取哈希值,目前我已经有了可以捕获MD5哈希值的以下正则表达式:
[0-9a-fA-F].{32}
然而,这也会获取较长字符串(例如SHA-1哈希)的前32个字符。我想知道如何编辑它以确保只有在字符串长度为32个字符而不是40个字符时才匹配?
编辑:抱歉,我应该说我正在使用Python 2.7。
我正在尝试编写一个正则表达式来获取哈希值,目前我已经有了可以捕获MD5哈希值的以下正则表达式:
[0-9a-fA-F].{32}
然而,这也会获取较长字符串(例如SHA-1哈希)的前32个字符。我想知道如何编辑它以确保只有在字符串长度为32个字符而不是40个字符时才匹配?
编辑:抱歉,我应该说我正在使用Python 2.7。
s = "3b4e1a15682994ef0bb2cbea8abfa105"
result = re.search(r'^[0-9a-fA-F]{32}$', s)
print result.group() # 3b4e1a15682994ef0bb2cbea8abfa105
\b
:s = "hash 3b4e1a15682994ef0bb2cbea8abfa105 some text"
result = re.search(r'\b[0-9a-fA-F]{32}\b', s)
print result.group() # 3b4e1a15682994ef0bb2cbea8abfa105
re.search(r'\b[0-9a-fA-F]{127}\b', s)
匹配128位哈希值。 - RomanPerekhrest你的正则表达式中有一个小错误(但非常重要)- [0-9a-fA-F].{32}
匹配一个十六进制字符和 32 个任意字符(除了换行符)。因此,你的模式应该是 [0-9a-fA-F]{32}
为了检查整个字符串是否匹配,你可以使用 re.fullmatch
(Python 3.4 中添加)或者使用锚点 ^
(字符串开始)和 $
(字符串结束)
你能贴出一些示例字符串吗?每个字符串的长度为32或40个字符。
如果没有示例,我可以考虑使用^
和$
来匹配字符串的开头和结尾,就像Python re教程中所解释的那样。
示例:
^[0-9a-fA-F]{32}$
^[0-9a-fA-F]{32}$
) 或re.fullmatch
。 - Sebastian Proske