如何从pdf提取电子邮件

时间:2019-03-13 10:30:47

标签: python regex email pdfminer

我正在尝试使用pdfminer和正则表达式从简历中提取电子邮件

from io import StringIO
from pdfminer3.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer3.converter import TextConverter
from pdfminer3.layout import LAParams
from pdfminer3.pdfpage import PDFPage
import re

def get_cv_email(self, cv_path):
    pagenums = set()
    output = StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)
    infile = open(cv_path, 'rb')
    for page in PDFPage.get_pages(infile, pagenums):
        interpreter.process_page(page)
    infile.close()
    converter.close()
    text = output.getvalue()
    output.close()
    match = re.search(r'[\w\.-]+@[\w\.-]+', text)
    email = match.group(0)
    return email

大多数简历都成功提取了电子邮件,但始终无法正常工作

示例:jayantanathcdh@gmail.comEducationalQualification

更新:如果电子邮件以大写字母开头,如何编辑正则表达式以忽略电子邮件后面的内容

2 个答案:

答案 0 :(得分:1)

根据您的最新评论,以匹配匹配的电子邮件,直到在@之后找到大写字母,您可以使用此正则表达式:

[\w\.-]+@[a-z0-9\.-]+

举个例子:

import re
text = "jayantanathcdh@gmail.comEducationalQualification"
match = re.search(r'[\w\.-]+@[a-z0-9\.-]+', text)
email = match.group(0)

print(email)
#jayantanathcdh@gmail.com

答案 1 :(得分:1)

尝试以下操作:ABC = 4 BCD = 2 ASD = 1 ZXC = 1

只要电子邮件的最后一部分是小写字母,它就可以正常工作。它将一直匹配,直到紧跟大写字母或单词边界为止。

此外,正则表达式应更准确地使用破折号和点,因此应处理\w+(?:[.-]\w+)*@\w+(?:[.-]\w+)+[.-][a-z_0-9]+(?=[A-Z]|(?!=[.-])\b)等无效的东西。

您有一个演示here