Educoder--Python正则表达式分组

该博客介绍了如何使用正则表达式进行分组操作,特别是在从文本中提取11位数字的手机号码。文章讲解了分组的基本概念,包括隐含的全局分组和命名分组,并提供了具体的Python代码示例。通过这些示例,读者可以学习到如何过滤掉字符串中的其他符号,只保留有效的手机号码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:分组

任务描述

本关任务:使用分组完成对中国手机号码的提取。

相关知识

分组

要实现分组很简单,使用()即可。从正则表达式的左边开始看,看到的第一个左括号(表示第一个分组,第二个表示第二个分组,依次类推。


  1. a='<div><a href="https://support.google.com/chrome/?
  2. p=ui_hotword_search" target="_blank">python正则表达式之分组</a>
  3. <p>dfsl</p></div>'
  4. print(re.search(r'<a.*>(.*)</a>',a).group(1))

输出:


  1. python正则表达式之分组

需要注意的是,有一个隐含的全局分组(就是索引号为0的分组),就是整个正则表达式匹配的结果。

命名分组

命名分组就是给具体有默认分组编号的组另外再起一个别名,方便以后的引用。
命令分组的语法格式如下:


  1. (?P<name>正则表达式)

语法格式中的字符P必须是大写的Pname是一个合法的标识符,表示分组的别名。如下例子:


  1. a = "ip='127.0.0.1',version='1.0.0'"
  2. res = re.search(r"ip='(?P<ip>\d+\.\d+\.\d+\.\d+).*", a)
  3. print(res.group('ip')) #通过命名分组引用分组

输出:


  1. 127.0.0.1

编程要求

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

  • 提取11位数字的手机号码,过滤掉字符串中其他符号。

测试说明

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


  1. (86)-17712576838,86 14295083635,(+86)
  2. 13722348123,17587918887,-15493106739,.13786842977,86-
  3. 15542304386,+86.15642387356,17345352790

  1. """
  2. (86)-17712576838
  3. 86 14295083635
  4. (+86) 13722348123
  5. 17587918887
  6. -15493106739
  7. .13786842977
  8. 86-15542304386
  9. +86.15642387356
  10. 17345352790"""

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


  1. ['17712576838', '14295083635', '13722348123', '17587918887',
  2. '15493106739', '13786842977', '15542304386', '15642387356',
  3. '17345352790']

实现代码:

import re

def re_group(input_data):

    result=[]

    #*********** Begin **********#

    result = re.findall(r'\(?\+?8?6?\)?[ .-]?([\d]{11})',input_data)

    #*********** End **********#

    return result

代码截图:

运行结果:

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值