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

如何判断正则表达式的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-所有标签都没有匹配数字

2条回答 默认 最新

相关推荐 更多相似问题