zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    「2021.08 实战」Springboot wagon 2.x 部署线上(自动重启)
    Springboot 使用 CacheManager(缓存是储存到内存中去的,程序结束,缓存也没了)
    [Linux]在CentOS中安装Python3的方法
    [VS2015]关闭_CRT_SECURE_NO_WARNINGS警告
    STL源码剖析-智能指针shared_ptr源码
    透明网桥-消除循环功能
    MPEG-PS封装格式
    RTP timestamp与帧率及时钟频率的关系
    Pyhton @staticmethod
    Python @classmethod
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/14131443.html
Copyright © 2011-2022 走看看