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

时间:2017-03-09 08:33:09

标签: python regex python-2.7

我正在尝试编写一个正在获取哈希值的正则表达式,我有以下正则表达式捕获MD5哈希值

[0-9a-fA-F].{32}

但是,这也将获得更长字符串的前32个字符,例如SHA-1哈希。我想知道如何编辑它以确保它只匹配字符串是32个字符长而不是40个字符?

编辑:对不起,我应该说我使用的是Python 2.7

3 个答案:

答案 0 :(得分:3)

要将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

答案 1 :(得分:2)

你的正则表达式中有一点(但都是重要的)错误 - [0-9a-fA-F].{32}匹配一个十六进制字符,然后匹配32个任何字符(换行符除外)。因此,您的模式应为[0-9a-fA-F]{32}

要检查整个字符串是否匹配,您可以使用re.fullmatchadded in Python 3.4)或使用锚点^(字符串的开头)和$(结束字符串)

答案 2 :(得分:1)

你能粘贴一些示例字符串(长度分别为32和40)吗?

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

示例:

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