第1关:分组
任务描述
本关任务:使用分组完成对中国手机号码的提取。
相关知识
分组
要实现分组很简单,使用()
即可。从正则表达式的左边开始看,看到的第一个左括号(
表示第一个分组,第二个表示第二个分组,依次类推。
a='<div><a href="https://support.google.com/chrome/?
p=ui_hotword_search" target="_blank">python正则表达式之分组</a>
<p>dfsl</p></div>'
print(re.search(r'<a.*>(.*)</a>',a).group(1))
输出:
python正则表达式之分组
需要注意的是,有一个隐含的全局分组(就是索引号为
0
的分组),就是整个正则表达式匹配的结果。
命名分组
命名分组就是给具体有默认分组编号的组另外再起一个别名,方便以后的引用。
命令分组的语法格式如下:
(?P<name>正则表达式)
语法格式中的字符P
必须是大写的P
,name
是一个合法的标识符,表示分组的别名。如下例子:
a = "ip='127.0.0.1',version='1.0.0'"
res = re.search(r"ip='(?P<ip>\d+\.\d+\.\d+\.\d+).*", a)
print(res.group('ip')) #通过命名分组引用分组
输出:
127.0.0.1
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
- 提取
11
位数字的手机号码,过滤掉字符串中其他符号。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:
(86)-17712576838,86 14295083635,(+86)
13722348123,17587918887,-15493106739,.13786842977,86-
15542304386,+86.15642387356,17345352790
"""
(86)-17712576838
86 14295083635
(+86) 13722348123
17587918887
-15493106739
.13786842977
86-15542304386
+86.15642387356
17345352790"""
你将使用以上格式的数据完成任务!
预期输出:
['17712576838', '14295083635', '13722348123', '17587918887',
'15493106739', '13786842977', '15542304386', '15642387356',
'17345352790']
实现代码:
import re
def re_group(input_data):
result=[]
#*********** Begin **********#
result = re.findall(r'\(?\+?8?6?\)?[ .-]?([\d]{11})',input_data)
#*********** End **********#
return result
代码截图:
运行结果: