Python - 无法从正则表达式模式获得结果数

时间:2018-01-20 16:39:06

标签: python regex email

在下面的代码中,我设法在imap库的电子邮件主题中找到了一个模式,并成功使用电子邮件ID打印了所有结果。但是,我想找出模式匹配的总次数。

我尝试使用len(结果),但它无法正常工作。非常感谢任何帮助!

import imaplib
import email
import re


mail = imaplib.IMAP4_SSL('xxxxx')
mail.login('xxxx' , 'xxxx')
mail.list()# Out: list of "folders" aka labels
mail.select('inbox')# Connects to Inbox

typ, uid = mail.uid('search',None, '(SUBJECT "")')
print ('TOTAL EMAILS IN MAILBOX:', len(uid[0].split()) + 1)
for ids in uid[0].split():
    typ, data = mail.uid('FETCH',ids, '(RFC822.SIZE BODY.PEEK[HEADER.FIELDS (SUBJECT)])')
    #ids=int(ids)+1
    subj = data[0][1].lstrip('Subject:').strip() + ' '
    patt = '.*'+'MV'+'.*'
    result = re.findall(patt, subj, re.I)
    for r in result:
        print ids,r

mail.logout()

2 个答案:

答案 0 :(得分:0)

看起来result始终为len==1,因为您的patt匹配任何后跟'MV'的内容,后跟任何内容(如果字符串中存在“MV”)成为整个字符串。这也适用于脚本中的任何一点,因为每个循环都会重新定义result

如果您想要为每个result计算所有匹配的ids,则需要一个额外的计数器变量:

result = re.findall(patt, subj, re.I)
resultCnt+=len(result)

答案 1 :(得分:-1)

我认为findall返回的迭代器不是可迭代的。

total = 0
for r in result:
    total += 1