2017-01-09 53 views
0

我想计算每个正则表达式搜索结果对一个文件。我相信我正在填充一个列表,然后通过尝试获取计数器的值来循环。当“variable_names”返回多个结果时,为什么index的值总是为零?

for file in XDTS: 
    data_tag_regex = re.compile(r'data_tag=\"(.*?)\"') 
    if file.endswith('.xdt'): 
     xdt_file = open(file, 'r') 
     for line in xdt_file: 
      variable_names = data_tag_regex.findall(line) 
      for index, variable_name in enumerate(variable_names): 
       print(index) 
+1

您能否提供其他任何必需的测试代码?例如,示例数据会产生所描述的问题? –

+0

你可以添加一个样本行来应用这个正则表达式,你会期望哪个输出比样本行? –

+0

您可能想要包含一些示例数据... –

回答

0

你必须每行一个匹配和多行匹配。你enumerate()呼叫从0每次开机,因为这是每个新线新的呼叫

for line in xdt_file: 
    # per line, find matches 
    variable_names = data_tag_regex.findall(line) 
    # for *this line only* print the indices, counting from 0 
    for index, variable_name in enumerate(variable_names): 
     print(index) 

如果你想在所有行保持索引每场比赛,你需要独立数:

index = 0 
for line in xdt_file: 
    variable_names = data_tag_regex.findall(line) 
    for variable_name in variable_names: 
     index += 1 
     print(index) 
+0

是的,这就是我所做的,我以为我得到所有匹配,而不是每行回来删除的问题,但它似乎堆栈溢出是惊人的快... –

+0

它会更清洁,更快或更好以任何其他方式读取所有的行一次,然后运行正则表达式? –

+0

@MattRalston:不是从内存的角度来看,给定一个合理大小的文件,我会逐行解析它。 –

相关问题