赞
踩
任务描述
我们已经学习了很多正则表达式相关知识,那么正则表达式编译是什么呢?本关任务就是:
使用compile
编译正则表达式;
用编译后的正则表达式去匹配字符串中的数字。
相关知识
正则表达式编译
compile
函数用于编译正则表达式,返回一个正则表达式对象,供match()
、search()
、findall()
等函数使用。
示例如下:
import re
str ='1Ab2Cdef3ds5ds548s4ds848we8rt6g46d46df48t6ds6x48g6s'
pattern = re.compile('\D') # 编译正则表达式,匹配不是数字的字符
pattern_Math = pattern.match(str) # 决定RE是否在字符串刚开始的位置匹配。如果满足,则返回一个match对象;如果不满足,返回空
print(pattern_Math) # 返回被RE匹配的字符串
输出:
None
使用re
的一般步骤是:先将正则表达式的字符串形式编译为pattern
实例;然后使用pattern
实例处理文本,并获取匹配结果(一个Match
实例(值为True
));最后使用Match
实例获取信息,进行其他的操作。可以把那些经常使用的正则表达式编译成正则表达式对象,从而提高程序的执行速度。
对之前的代码进行简单修改:
math_Group = pattern.match(str,1,10) # 查找从索引 1 开始 10 结束
print(math_Group.group()) # 返回被RE匹配的字符串
输出:
A
可以看到,匹配结果和之前不一样,是因为索引从 1 开始匹配,首个字符不再是数字,所以匹配成功。再来看一下findall()
的使用。
pattern_Find1 = pattern.findall(str) # 找到RE匹配的所有子串,并把它们作为一个列表返回
print(pattern_Find1) # 返回一个列表
输出 :
['A', 'b', 'C', 'd', 'e', 'f', 'd', 's', 'd', 's', 's', 'd',
's', 'w', 'e', 'r', 't', 'g', 'd', 'd', 'f', 't', 'd', 's', 'x', 'g',
's']
findall()
也可以定义索引的起始和结束位置。
pattern_Find2 = pattern.findall(str,5,10) # 查找从索引 5 开始到 10 结束的所有子串,并把它们作为一个列表返回
print(pattern_Find2)
输出:
['d', 'e', 'f', 'd']
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
使用compile
编译正则表达式;
观察右侧三个测试集的规律,用编译后的正则表达式去匹配字符串中的数字。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:010-12345
预期输出:('010', '12345')
实现代码:
import re
def re_telephone(str):
#*********** Begin **********#
re_input = '^(\d{3})-(\d{3,8})$'
re_telephone = re.compile(re_input)
re_group = re_telephone.match(str).groups()
#*********** End **********#
return re_group
代码截图:
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。