头歌科学数据训练营之表达式(标记)

题目

任务描述

本关任务:编写正则匹配出以study开头的邮箱,不区分大小写。

相关知识

为了完成本关任务,你需要掌握: 1.Python正则表达式基本用法;

2.Python正则表达式标记。

不区分大小写

re.IGNORECASE也可以简写为re.I,使用该标记,可以使正则表达式变为不区分大小写。 示例:

 
  1. a = re.search(r'apple',"THIS IS AN APPLE",re.IGNORECASE)
  2. b = re.search(r'apple','THIS IS AN APPLE',re.I)
  3. print(a)
  4. print(b)

输出:

 
  1. <_sre.SRE_Match object; span=(11, 16), match='APPLE'>
  2. <_sre.SRE_Match object; span=(11, 16), match='APPLE'>
点匹配换行符

re.DOTALL标记(别名为re.S)可以让.字符除了匹配其他字符之外,还匹配换行符。 示例:

 
  1. a = re.search(r'.+','hello\npython')
  2. b = re.search(r'.+','hello\npython',re.S)
  3. c = re.search(r'.+','hello\npython',re.DOTALL)
  4. print(a)
  5. print(b)
  6. print(c)

输出:

 
  1. <_sre.SRE_Match object; span=(0, 5),match='hello'>
  2. <_sre.SRE_Match object; span=(0, 12),match='hello\npython'>
  3. <_sre.SRE_Match object; span=(0, 12),match='hello\npython'>
多行模式

re.MULTILINE标记(别名为re.M)可以匹配多行,使用该标记可以使得仅能够匹配字符串开始与结束的^$字符可以匹配字符串内任意行的开始与结束。

 
  1. a = re.search(r'^like','foo\nlike')
  2. b = re.search(r'^like','foo\nlike',re.M)
  3. print(a)
  4. print(b)

输出:

 
  1. None
  2. <_sre.SRE_Match object; span=(4, 8), match='like'>
详细模式

re.VERBOSE标记(别名为re.X)允许复杂的正则表达式以更容易的方式表示。 该标记做两件事,首先,它会使所有的空白(除了字符组中)被忽略,包括换行符。其次,它将#字符(同样,除非在字符组内)当做注释字符。 示例:

 
  1. a = re.search(r'(?P<first>[\d]{3})-(?P<second>[\d]{4})','867-5556')
  2. b = re.search(r"""(?P<first>[\d]{3})
  3. - #匹配一个 - 连接符
  4. (?P<second>[\d]{4}) # 匹配四个数字
  5. """,
  6. '010-1234',re.X)
  7. print(a)
  8. print(b)

输出:

 
  1. <_sre.SRE_Match object; span=(0, 8), match='867-5556'>
  2. <_sre.SRE_Match object; span=(0, 8), match='010-1234'>
调试模式

re.DEBUG标记(没有别名)在编译正则表达式时将一些调试信息输出到 sys.stderr 示例:

 
  1. a = re.search(r'(?P<first>[\d]{3})-(?P<second>[\d]{4})','010-1234',re.DEBUG)
  2. print(a)

输出:

 
  1. SUBPATTERN 1
  2. MAX_REPEAT 3 3
  3. IN
  4. CATEGORY CATEGORY_DIGIT
  5. LITERAL 45
  6. SUBPATTERN 2
  7. MAX_REPEAT 4 4
  8. IN
  9. CATEGORY CATEGORY_DIGIT
  10. <_sre.SRE_Match object; span=(0, 8), match='010-1234'>
使用多个标记

有时候我们可能需要同时使用多个标记,为了完成这点,可以使用|操作符。 示例: re.DOTALL|re.MULTILINEre.S | re.M

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 匹配出以study开头的邮箱,不区分大小写。
测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。 测试输入:

 
  1. 'Study123456@qq.com\nsTudyleslie@163.com\nSTUDY@gmail.com\nastudyeasy@163.com\nstuDYgood@gmail.com'

输入经过stepm.py文件处理为以下格式:

 
  1. """
  2. Study123456@qq.com
  3. sTudyleslie@163.com
  4. STUDY@gmail.com
  5. astudyeasy@163.com
  6. stuDYgood@gmail.com
  7. """

你将使用以上格式的数据完成任务! 预期输出:

 
  1. ['Study123456@qq.com', 'sTudyleslie@163.com', 'STUDY@gmail.com', 'stuDYgood@gmail.com']

代码

import re
def re_mark(input_data):
    result=[]
    #*********** Begin **********#
    result = re.findall('^study\w*\d*@\w*\d*.com',input_data,re.M | re.I)
    #*********** End **********#

    return result

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值