我正在尝试使用regexp从选定的字符串搜索中删除所有空格。代码有效,但它会继续返回错误,我不确定如何解决...?
elif searchType =='2':
print " Directory to be searched: c:\Python27 "
directory = os.path.join("c:\\","SQA_log")
userstring = raw_input("Enter a string name to search: ")
userStrHEX = userstring.encode('hex')
userStrASCII = ' '.join(str(ord(char)) for char in userstring)
regex = re.compile(r"(%s|%s|%s)" % ( re.escape( userstring ), re.escape( userStrHEX ), re.escape( userStrASCII )))
choice = raw_input("Type 1 to search with whitespace. Type 2 to search ignoring whitespace: ")
if choice == '1':
for root,dirname, files in os.walk(directory):
for file in files:
if file.endswith(".log") or file.endswith(".txt"):
f=open(os.path.join(root, file))
for i,line in enumerate(f.readlines()):
result = regex.search(line)
if regex.search(line):
print " "
print "Line: " + str(i)
print "File: " + os.path.join(root,file)
print "String Type: " + result.group()
print " "
f.close()
re.purge()
if choice == '2':
for root,dirname, files in os.walk(directory):
for file in files:
if file.endswith(".log") or file.endswith(".txt"):
f=open(os.path.join(root, file))
for i,line in enumerate(f.readlines()):
result = regex.search(re.sub(r'\s', '',line))
if regex.search(line):
print " "
print "Line: " + str(i)
print "File: " + os.path.join(root,file)
print "String Type: " + result.group()
print " "
f.close()
re.purge()
这是它返回的错误:
Line: 9160
File: c:\SQA_log\13.00.log
String Type: Rozelle07
Line: 41
File: c:\SQA_log\NEWS.txt
String Type: 526f7a656c6c653037
Line: 430
File: c:\SQA_log\README.txt
Traceback (most recent call last):
File "C:\SQA_log\cmd_simple.py", line 226, in <module>
SQAST().cmdloop()
File "C:\Python27\lib\cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "C:\Python27\lib\cmd.py", line 219, in onecmd
return func(arg)
File "C:\SQA_log\cmd_simple.py", line 147, in do_search
print "String Type: " + result.group()
AttributeError: 'NoneType' object has no attribute 'group'
答案 0 :(得分:2)
似乎regex.search
在line
上因空格被剥离而失败,但是当空格存在时成功。你没有给出regex
的定义,所以我不能告诉你为什么会这样,但是如果你用if regex.search(line)
替换if result:
,你就不应该得到那个错误。
错误的原因是re.search
在找不到任何匹配项时返回特殊值None
,而不是匹配对象。 None
总是在布尔表达式中求值为False
,因此您可以在if
语句中使用它,但它没有任何属性,这就是result.group()
失败的原因结果是None
。
顺便说一句:如果你想删除re.gsub(r'\s+', '', line)
中空白的所有出现而不仅仅是第一个空格,你可能想要使用re.sub(r'\s', '', line)
代替line
固定代码:
for i,line in enumerate(f.readlines()):
result = regex.search(re.gsub(r'\s+', '', line))
if result:
print ...
答案 1 :(得分:0)
我不明白你在这做什么:
result = regex.search(re.sub(r'\s', '',line))
你用空格替换了一个空格,然后你在搜索什么?错误信息非常清楚。 result.group()
什么都没有。