我正在尝试使用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
更新:如果电子邮件以大写字母开头,如何编辑正则表达式以忽略电子邮件后面的内容
答案 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