m0_68180072 2022-05-05 11:01 采纳率: 72.7%
浏览 166

如何判断正则表达式的finditer结果(迭代器?)是否为空?(OpenJudge 054 电话号码)(语言-python)

就是我用正则表达式匹配后,用的是finditer,然后想要判断是否非空,不管是用if list(tags) != []: 还是if numbers:

程序都不出结果了,也不报错.
所以应该怎么写呀这一句?不用下面的代码不用考虑缩进错误,程序本身是对了,因为用不了if,我是用了count计数很麻烦.

这是正确的代码(没有使用if):

import re
p_tag = r'(<([a-z]+)>).*?(</\2>)'    #group(1)首标签 (2)标签名 (3)尾标签
p_num = r'\((\d\d?)\)\-\d{3}(?!\d)'     #group(1)区号 (2)预查条件
n = eval(input())
input_list = []
for i in range(n):
    input_list.append(input())
for s in input_list:
    tags = re.finditer(p_tag,s)
    count_line = 0
    #if list(tags) != []:     <------不用管缩进,总之加上这条程序就出不了结果但也不报错-------
    for tag in tags:
        count_tag = 0
        line = tag.group(1)
        numbers = re.finditer(p_num,tag.group(0))
        #if numbers:         <--------------------这条也是一样--------------------
        for num in numbers:
            line += num.group(1)+','
            count_line += 1
            count_tag += 1
        if count_tag != 0:
            print(line[:-1] + tag.group(3))
    if count_line == 0:
        print("NONE")

改成 if 后是这样的:
相当于for tag in tags:里面的内容都没有执行.

import re
p_tag = r'(<([a-z]+)>).*?(</\2>)'    #group(1)首标签 (2)标签名 (3)尾标签
p_num = r'\((\d\d?)\)\-\d{3}(?!\d)'     #group(1)区号 (2)预查条件
n = eval(input())
input_list = []
for i in range(n):
    input_list.append(input())
for s in input_list:
    tags = re.finditer(p_tag,s)
    #count_line = 0
    if list(tags) != []:     #<------不用管缩进,总之加上这条程序就出不了结果但也不报错-------
        print("存在匹配标签")   #<------到这里还是有显示的--------------------------
        count_line = 0
        for tag in tags:
            print("each tag:")    # <--------这条就没有不显示了-------------------------
            count_tag = 0
            line = tag.group(1)
            numbers = re.finditer(p_num,tag.group(0))
            if numbers:     
                print("存在匹配数字")
                for num in numbers:
                    line += num.group(1)+','
                    count_line += 1
                print(line[:-1] + tag.group(3))
        if count_line == 0:
            print("NONE-所有标签都没有匹配数字")
    else:
        print("NONE-没有匹配标签")

运行结果

1
<bb>(01)-123<a>bbb(02)-2784KK</a><xy>stk(1)-123(03)-345b</xy>(04)-123</xy><z>(05)-123</zz>zz<yy>(06)-123</yy>
存在匹配标签
NONE-所有标签都没有匹配数字

  • 写回答

3条回答 默认 最新

  • 哥菜带 2022-05-05 13:15
    关注

    可以试试换成if not list(a)==[]
    或者if not len(a)==0
    或者if list(a)==[] pass else:……

    评论

报告相同问题?

问题事件

  • 修改了问题 5月5日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)