使用文件

时间:2015-10-05 01:12:23

标签: regex python-2.7

我创建了文件' file1.txt'有"你好"作为搜索模式。程序下面的程序完全计算了行数,虽然这里的问题是单词或模式计数" hello"。对于同一行,如果有3' hello',它仍然只计算一个。在我的文件中总共有13'你好'图案。其中2行有3'你好'图案。所以,最终我得到的答案是9而不是13。因此,对于每一行,它只计为1.如何解决这个问题?

import re

def reg_exp():
    pattern = 'hello'
    infile = open('file1.txt', 'r')
    match_count = 0
    lines = 0

    for line in infile:
        match = re.search(pattern, line)
        if match:
            match_count += 1
            lines += 1
    return (lines, match_count)

if __name__ == "__main__":
    lines, match_count = reg_exp()
    print 'LINES::', lines
    print 'MATCHES::', match_count

2 个答案:

答案 0 :(得分:2)

正则表达式如何运作。 re.search()会在找到第一个匹配项后立即返回。您可以使用re.finditer()进行迭代,或使用re.findall()返回每行的所有匹配项。

for line in infile:
    match = re.findall(pattern, line)   
    if match:
        match_count += len(match)
        lines += 1

ideone Demo

  

re.search(pattern, string, flags=0)

     

扫描字符串寻找   正则表达式模式生成的第一个位置   匹配,并返回相应的MatchObject实例。如果,则返回无   字符串中没有位置与模式匹配;请注意这是   不同于在某个点找到零长度匹配   串。

  

re.findall(pattern, string, flags=0)

     

返回所有非重叠匹配   字符串中的模式,作为字符串列表。字符串是   从左到右扫描,并按找到的顺序返回匹配。如果   模式中存在一个或多个组,返回列表   组;如果模式有多个,这将是一个元组列表   组。结果中包含空匹配,除非他们触摸了   另一场比赛的开始。

答案 1 :(得分:-1)

def reg_exp():
    pattern = '(hello)'
    infile = open('file1.txt', 'r')
    match_count = 0
    lines = 0

    for line in infile:
        match = re.search(pattern, line)
        if match:
            match_count += len(match.groups())
            lines += 1
    return (lines, match_count)