Python : 从文件名字符串中提取邮件

Python : Extract mails from the string of filenames

我想从文件名中获取邮件。这是一组文件名示例:

string1 = "benoit.m.fontaine@outlook.fr_2022-05-11T11_59_58+00_00.pdf"
string2 = "jeane_benrand@toto.pt_test.pdf"
string3 = "rosy.gray@amazon.co.uk-fdsdfsd-saf.pdf"

我想按部分拆分文件名。第一个包含电子邮件,第二个包含其余部分。所以它应该给出 string2 :

['jeane_benrand@toto.pt', '_test.pdf']

我尝试了这个正则表达式函数,但它不适用于第二个和第三个字符串。

email = re.search(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", string)

感谢您的帮助

鉴于您提供的样本,您可以这样做:

import re

strings = ["benoit.m.fontaine@outlook.fr_2022-05-11T11_59_58+00_00.pdf",
           "jeane_benrand@toto.pt_test.pdf",
           "rosy.gray@amazon.co.uk-fdsdfsd-saf.pdf"]

pattern = r'([^@]+@[\.A-Za-z]+)(.*)'

[re.findall(pattern, string)[0] for string in strings]

输出:

[('benoit.m.fontaine@outlook.fr', '_2022-05-11T11_59_58+00_00.pdf'),
 ('jeane_benrand@toto.pt', '_test.pdf'),
 ('rosy.gray@amazon.co.uk', '-fdsdfsd-saf.pdf')]
    

邮件模式说明([^@]+@[\.A-Za-z]+):

  • [^@]+:除@
  • 以外的任意字符组合
  • @:在
  • [\.A-Za-z]+: 字母和点的任意组合

休息模式解释(.*)

  • (.*):任意字符组合