Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析;“发送”;在电子邮件中排队_Python_Regex_Email_Beautifulsoup - Fatal编程技术网

Python 解析;“发送”;在电子邮件中排队

Python 解析;“发送”;在电子邮件中排队,python,regex,email,beautifulsoup,Python,Regex,Email,Beautifulsoup,我有一个约150封电子邮件的文件夹,全部保存为HTML文件(Firefox扩展名),我需要记录“发送”行上的年份;如下图所示 我尝试使用正则表达式,但失败了;它根本不会打印任何结果,向我表明我的正则表达式不起作用。我尝试使用email模块中的get\u payload()和message\u from\u string()命令,但由于这是一个HTML文档,因此失败了。然后,我尝试使用BeautifulSoup捕获整个电子邮件,然后只解析“已发送”行,但由于未知原因,我失败了。我不是这些模块的专

我有一个约150封电子邮件的文件夹,全部保存为HTML文件(Firefox扩展名),我需要记录“发送”行上的年份;如下图所示

我尝试使用正则表达式,但失败了;它根本不会打印任何结果,向我表明我的正则表达式不起作用。我尝试使用
email
模块中的
get\u payload()
message\u from\u string()
命令,但由于这是一个HTML文档,因此失败了。然后,我尝试使用BeautifulSoup捕获整个电子邮件,然后只解析“已发送”行,但由于未知原因,我失败了。我不是这些模块的专家,因此任何和所有的帮助都将不胜感激

我尝试过的相关代码:

for filename in os.listdir(path):
    file_path = os.path.join(path, filename)
    if os.path.isfile(file_path):
        html_ = open(file_path, 'r').read()
        soup_ = BeautifulSoup(html, 'lxml')
        pattern = re.compile(r'Sent:/s([/d]{4})')
        txt = html.read()
        dates = pattern.findall(txt)
        if "Sent" in line:
            print("Date:", ''.join(dates))
您的正则表达式(我认为斜杠只是一个输入错误)与
Sent:
和年份之间的字符不匹配。您可以将正则表达式修复为

r'Sent:.*?\b(\d{4})\b'
或-要解释已发送的
出现在行首的事实,请执行以下操作:

r'(?m)^Sent:.*?\b(\d{4})\b'
详细信息

  • (?m)^
    -行的开始
  • 已发送:
    -文字字符序列
  • *?
    -除换行符以外的任何0+字符,尽可能少
  • \b(\d{4})\b
    -一个由4位数字组成的完整单词(捕获到组1中,因此作为
    re.findall
    的结果返回)

使用
r'Sent:.*\b(\d{4})\b'
我认为这取决于电子邮件的HTML格式。。。另外,您是否有办法获取原始电子邮件数据?解析可能会更容易,因为你只需要找到
发送的
标题…@WiktorStribiżew,它工作得很好,非常感谢。我真的认为我的正则表达式技能已经提高了,这次我会自己去做的,但从你的文章中我可以看出我做得很好off@mgilson这实际上也是我的思考过程,获取原始数据,但我真的很难成功地做到这一点,所以我想在这里问一个问题。不过谢谢,另一个人的正则表达式帮我解决了这个问题