我在试着匹配四个像这样的哈希:
{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
{SSHA}QhikpbGFa5NAckbjcZ_K_WoJNh4=
{SSHA}5_DNVWsyofo-oIEzHnhv30rSN7c=
{MD5}5/DNVWwyafo-pIEaHNhv39sSN7c=我已经成功地将前两个表达式与正则表达式匹配:\D{5,}[a-zA-Z0-9]\w+\(?=,但是我无法在第三个或第四个正则表达式上获得完全匹配。有什么更好的正则表达式来匹配给定的散列呢?
发布于 2017-06-12 14:17:21
请注意,\D{5,}匹配5个或更多的非数字字符,然后[a-zA-Z0-9]匹配一个ASCII字母或数字,而\w+匹配1+字母/数字/_。因此,如果字符串中有-或/,则不会得到匹配。或者前5个字符包含一个数字。
我建议采用以下模式:
\{[^{}]*}[a-zA-Z0-9][\w/-]+=?见regex演示。
它符合:
\{[^{}]*} -a {,然后是{和}以外的0+字符,然后是} (请注意,您可以进一步精确地确定它:\{\w+}匹配{,一个或多个字母/数字/_,再加上},甚至是\{(?:SS?HA|MD5)}匹配SHA、d21或d22与d23所包围)[a-zA-Z0-9] - ASCII字母或数字[\w/-]+ -1或更多字字符(字母、数字或_)=? -一个可选的,1或0出现(由于?量词) =符号(贪婪的?使它匹配一个=,如果它被发现)。import re
s = """
TEXT {SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
{SSHA}QhikpbGFa5NAckbjcZ_K_WoJNh4= and some more
{SSHA}5_DNVWsyofo-oIEzHnhv30rSN7c text here
{MD5}5/DNVWwyafo-oIEzHnhv30rSN7c= maybe."""
rx = r"\{[^{}]*}[a-zA-Z0-9][\w/-]+=?"
print(re.findall(rx, s))
# => ['{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=', '{SSHA}QhikpbGFa5NAckbjcZ_K_WoJNh4=', '{SSHA}5_DNVWsyofo-oIEzHnhv30rSN7c', '{MD5}5/DNVWwyafo-oIEzHnhv30rSN7c=']发布于 2017-06-12 14:26:38
我想提出一些类似的建议:
\{[SHAMD5]{3,4}\}[^=]+=?它将匹配{3或4个字符,这些字符是您列出的字符组合。你可以把它改为A-Z0-9来扩展它,但是我喜欢让它更紧一些。然后.则所有(至少1)非=字符。以可选的=字符结尾。下面是我的python演示:
import re
textlist = [
"{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M="
,"{SSHA}QhikpbGFa5NAckbjcZ_K_WoJNh4="
,"{SSHA}5_DNVWsyofo-oIEzHnhv30rSN7c="
,"{MD5}5/DNVWwyafo-pIEaHNhv39sSN7c="
,"{MD5}5/DNVWwyafo-pIEaHNhv39sSN7c"
,"test for break below"
,"{WORD}stuff="
,"{MD55/DNVWwyafo-pIEaHNhv39sSN7c="
,"MD5}5/DNVWwyafo-pIEaHNhv39sSN7c="
]
for text in textlist:
if re.search("\{[SHAMD5]{3,4}\}[^=]+=?", text):
print ("match")
else:
print ("no soup for you")注意列表的末尾有一些测试,以确保regex不只是在任意情况下成功。
https://stackoverflow.com/questions/44501090
复制相似问题