北大OJ 054 电话号码(转载)

文章讲述了如何使用Python的正则表达式库re来处理输入数据,从特定的tag中抽取电话号码的区号。如果tag不存在或者不含电话号码,则输出NONE。处理过程包括两步:首先找到所有的tag,然后在每个tag内部寻找符合格式的电话号码。
摘要由CSDN通过智能技术生成

描述

输入
有多组数据,每组一行
输出
对每组数据, 抽取出其中的tag及其包含的电话号码中的区号输出。每个tag输出为一行。tag外的电话号码不用理会。
如果找不到tag及其包含的电话号码, 则输出NONE
数据保证不会出现两个tag重叠的情况。
样例输入
2
(01)-123bbb(02)-2784KKstk(1)-123(03)-345b(04)-123(05)-123zz(06)-123
(01)-1231223(01)-12
样例输出
1,03
06
NONE
提示
1) tag中间可以有任何文字,比如 xddd也是一个合法tag
2) 在分组的右边可以通过分组的编号引用该分组所匹配的子串
m = r’(((ab*)c)d)e\3’ #要求 ab*cde后面跟着第三分组的内容
r = re.match(m,“abbbcdeabbbkfg”) # 后面的bbb少一个b则不能匹配,因为第三分组是abbb
print(r.group(3)) # abbb
print(r.group()) # abbbcdeabbb
3) 如果一个正则表达式搞不定,可以先用一个正则表达式抽取某个中间结果,再在中间结果里面手工或者用另外的正则表达式进一步分析

import re
n = int(input())
 
m = r"<([a-z]+)>(.*?)(</\1>)"
m2 = "\((\d{1,2})\)-\d{3}(?!\d)"  # 后向否定断言(?!\d)
 
for i in range(n):
    s = input()
    lst = re.findall(m, s)  # 先用m提取出每个tag
    if lst == []:  # 如果没有tag,直接打印NONE
        print("NONE")
    else:
        length = len(lst)
        for x in lst:  # 对每个tag
            xc = re.findall(m2, x[1])  # 用m2提取出tag里的电话号码
            if (xc == []):
                length -= 1
                if length == 0:
                    print("NONE")  # 如果tag里没有电话号码,打印NONE
            else:
                print("<" + x[0] + ">", end="")
                for j in range(len(xc) - 1):
                    print(xc[j], end=",")
                print(xc[-1], end="")
                print(x[2])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值