• python正则表达式多次模式匹配到电子邮件


    problem

    1、 在附件address-7.txt文件中具有如下的格式:

    raw = '''<name>Mary Brown</name>
    1998.06.01  13031107444  Mary.Brown@hotmail.com 
    Room 301, Building 3, 220 Handan Road
    <name>John Wilson</name> 
    18919819461 
    John_W@qq.com 
    John_2@sina.com 
    1804273611@fudan.edu.cn
    @Room 1101, Building 5, No.450, Nanjing Road
    <name>Adam Davis</name> 
    2000.01.01
    310110200001010056x
    17100345361 
    1-Adam@me.com 
    2-Adam@sina.com 
    Room 1101, No. 5, Lane 22, Siping Road
    <name>Seven Carl</name> 
    2010.01.01
    310110200001010056x
    seven@google.com 
    carl@sina.com
    '''
    
    

    (1)每个用户的信息由姓名标识分割
    (2)电子邮件地址格式: 用户名@域名.域名[.域名] [a-zA-Z0-9._-]等字符组成,用户名和域名由@相连接,@后面的域名至少有二级域名
    分析附件address-7.txt文件里面每个人的电子邮件地址并打印出来(按照姓名升序),如图所示:

    analyze

    这个问题要用多次正则表达式进行匹配, 第一次匹配姓名

    name_partten = r'<name>(.+?)</name>'
    names = re.findall(name_partten, raw)
    print(names)
    

    第二次匹配夹杂着电子邮件的乱七八糟的信息:

    # 匹配email 
    raw_info_partten = r'</name>(.*?)<name>'
    raw_infos = re.findall(raw_info_partten, processed_raw)
    # 注意这里的processed_raw是经过处理的raw, 对raw要去掉换行符,替换为空格, 并且在最后加一个<name>
    print(raw_infos)
    

    第三次匹配上一步结果中的email

    for raw_info in raw_infos:
    	email_partten = r'([a-zA-Z0-9._-]+@[a-zA-Z0-9._]+.[a-zA-Z0-9._]+[.[a-zA-Z0-9._]+]?)'
            # 注意上面可有可无的三级域名要用[]作为一个整体可有可无;()是用来分组的
    	emails = re.findall(email_partten, raw_info)
    	print(emails)
    
  • 相关阅读:
    python面向对象
    Python基本数据类型
    小刘同学的第一百四十四篇博文
    小刘同学的第一百四十三篇日记
    小刘同学的第一百四十二篇日记
    小刘同学的第一百四十一篇日记
    小刘同学的第一百四十篇日记
    小刘同学的第一百三十九篇博文
    小刘同学的第一百三十八篇日记
    小刘同学的第一百三十七篇日记
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/14131443.html
Copyright © 2020-2023  润新知