使用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上找到与此问题相关的答案。简而言之,任何帮助都会很棒。
答案 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)
在我看来,您应该将收集的表达式传递给yo
到re.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