题目
任务描述
本关任务:编写正则匹配出以study
开头的邮箱,不区分大小写。
相关知识
为了完成本关任务,你需要掌握: 1.Python
正则表达式基本用法;
2.Python
正则表达式标记。
不区分大小写
re.IGNORECASE
也可以简写为re.I
,使用该标记,可以使正则表达式变为不区分大小写。 示例:
a = re.search(r'apple',"THIS IS AN APPLE",re.IGNORECASE)
b = re.search(r'apple','THIS IS AN APPLE',re.I)
print(a)
print(b)
输出:
<_sre.SRE_Match object; span=(11, 16), match='APPLE'>
<_sre.SRE_Match object; span=(11, 16), match='APPLE'>
点匹配换行符
re.DOTALL
标记(别名为re.S
)可以让.
字符除了匹配其他字符之外,还匹配换行符。 示例:
a = re.search(r'.+','hello\npython')
b = re.search(r'.+','hello\npython',re.S)
c = re.search(r'.+','hello\npython',re.DOTALL)
print(a)
print(b)
print(c)
输出:
<_sre.SRE_Match object; span=(0, 5),match='hello'>
<_sre.SRE_Match object; span=(0, 12),match='hello\npython'>
<_sre.SRE_Match object; span=(0, 12),match='hello\npython'>
多行模式
re.MULTILINE
标记(别名为re.M
)可以匹配多行,使用该标记可以使得仅能够匹配字符串开始与结束的^
与$
字符可以匹配字符串内任意行的开始与结束。
a = re.search(r'^like','foo\nlike')
b = re.search(r'^like','foo\nlike',re.M)
print(a)
print(b)
输出:
None
<_sre.SRE_Match object; span=(4, 8), match='like'>
详细模式
re.VERBOSE
标记(别名为re.X
)允许复杂的正则表达式以更容易的方式表示。 该标记做两件事,首先,它会使所有的空白(除了字符组中)被忽略,包括换行符。其次,它将#
字符(同样,除非在字符组内)当做注释字符。 示例:
a = re.search(r'(?P<first>[\d]{3})-(?P<second>[\d]{4})','867-5556')
b = re.search(r"""(?P<first>[\d]{3})
- #匹配一个 - 连接符
(?P<second>[\d]{4}) # 匹配四个数字
""",
'010-1234',re.X)
print(a)
print(b)
输出:
<_sre.SRE_Match object; span=(0, 8), match='867-5556'>
<_sre.SRE_Match object; span=(0, 8), match='010-1234'>
调试模式
re.DEBUG
标记(没有别名)在编译正则表达式时将一些调试信息输出到 sys.stderr
示例:
a = re.search(r'(?P<first>[\d]{3})-(?P<second>[\d]{4})','010-1234',re.DEBUG)
print(a)
输出:
SUBPATTERN 1
MAX_REPEAT 3 3
IN
CATEGORY CATEGORY_DIGIT
LITERAL 45
SUBPATTERN 2
MAX_REPEAT 4 4
IN
CATEGORY CATEGORY_DIGIT
<_sre.SRE_Match object; span=(0, 8), match='010-1234'>
使用多个标记
有时候我们可能需要同时使用多个标记,为了完成这点,可以使用|
操作符。 示例: re.DOTALL|re.MULTILINE
或 re.S | re.M
。
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
- 匹配出以
study
开头的邮箱,不区分大小写。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。 测试输入:
'Study123456@qq.com\nsTudyleslie@163.com\nSTUDY@gmail.com\nastudyeasy@163.com\nstuDYgood@gmail.com'
输入经过stepm.py
文件处理为以下格式:
"""
Study123456@qq.com
sTudyleslie@163.com
STUDY@gmail.com
astudyeasy@163.com
stuDYgood@gmail.com
"""
你将使用以上格式的数据完成任务! 预期输出:
['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