Educoder--Python正则表达式编译

第1关:正则表达式编译

任务描述

我们已经学习了很多正则表达式相关知识,那么正则表达式编译是什么呢?本关任务就是:

  1. 使用compile编译正则表达式;

  2. 用编译后的正则表达式去匹配字符串中的数字。

相关知识

正则表达式编译

compile函数用于编译正则表达式,返回一个正则表达式对象,供match()search()findall()等函数使用。

示例如下:

 
 
  1. import re
  2. str ='1Ab2Cdef3ds5ds548s4ds848we8rt6g46d46df48t6ds6x48g6s'
  3. pattern = re.compile('\D') # 编译正则表达式,匹配不是数字的字符
  4. pattern_Math = pattern.match(str) # 决定RE是否在字符串刚开始的位置匹配。如果满足,则返回一个match对象;如果不满足,返回空
  5. print(pattern_Math) # 返回被RE匹配的字符串

输出:

 
 
  1. None

使用re的一般步骤是:先将正则表达式的字符串形式编译为pattern实例;然后使用pattern实例处理文本,并获取匹配结果(一个Match实例(值为True));最后使用Match实例获取信息,进行其他的操作。可以把那些经常使用的正则表达式编译成正则表达式对象,从而提高程序的执行速度。
对之前的代码进行简单修改:

 
 
  1. math_Group = pattern.match(str,1,10) # 查找从索引 1 开始 10 结束
  2. print(math_Group.group()) # 返回被RE匹配的字符串

输出:

扫描二维码关注公众号,回复: 15411769 查看本文章
 
 
  1. A

可以看到,匹配结果和之前不一样,是因为索引从 1 开始匹配,首个字符不再是数字,所以匹配成功。再来看一下findall()的使用。

 
 
  1. pattern_Find1 = pattern.findall(str) # 找到RE匹配的所有子串,并把它们作为一个列表返回
  2. print(pattern_Find1) # 返回一个列表

输出 :

 
 
  1. ['A', 'b', 'C', 'd', 'e', 'f', 'd', 's', 'd', 's', 's', 'd',
  2. 's', 'w', 'e', 'r', 't', 'g', 'd', 'd', 'f', 't', 'd', 's', 'x', 'g',
  3. 's']

findall()也可以定义索引的起始和结束位置。

 
 
  1. pattern_Find2 = pattern.findall(str,5,10) # 查找从索引 5 开始到 10 结束的所有子串,并把它们作为一个列表返回
  2. print(pattern_Find2)

输出:

 
 
  1. ['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

代码截图:

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_57409899/article/details/124111193
今日推荐