从用户输入计算特殊字符在txt文件中出现的行数(Python 2.7)

时间:2015-04-12 12:08:13

标签: python regex python-2.7 raw-input

使用Python 2.7,我试图在Unix中创建一个模拟grep搜索命令的程序。换句话说,我想要求用户输入正则表达式,然后计算用户输入的正则表达式出现在文件中的行数。

这是我的代码,我已经知道这完全搞砸了(我已经解决了这个问题好几个小时了,而且我的机智已经结束)。在这段代码中,我输入了字符串" ^作者"当它应该从我决定打开的文件(" what.txt"文件)返回大约1798行时返回0行:

import re
hand = open('what.txt')
yo = raw_input("Enter a regular expression: ")
count = 0
for line in hand:
    x = re.findall('.*[a-zA-Z]+.*', line)
    if yo in line and len(x) > 0:
        count += 1

print "what.txt had", count, "lines that matched %s" % yo

我正在填补空白,并且无法在StackOverflow上找到与此问题相关的答案。简而言之,任何帮助都会很棒。

3 个答案:

答案 0 :(得分:1)

目前,您的搜索实际上并未使用正则表达式。

x = re.findall(yo, line)
if x:
    count += 1 # multiple non-overlapping occurences on one line

print "what.txt had {0} lines that matched {1}".format(count, yo)

答案 1 :(得分:0)

如何使用re模块来处理正则表达式?

for line in hand.readlines():
    if re.findall(yo,line):
        count+=1

在你的代码中,你使用正则表达式就好像它只是一个字符串,但你必须使用一个与正则表达式一起工作的模块,例如re

答案 2 :(得分:0)

在我看来,您应该将收集的表达式传递给yore.findall()。我对grep并不熟悉,但只是把它传给findall似乎对我有用。

import re
hand = open('what.txt')
yo = raw_input("Enter a regular expression: ")
count = 0
for line in hand:
    x = re.findall(yo, line)
    if len(x) > 0:
        count += 1
        print(x)

print "what.txt had", count, "lines that matched %s" % yo