从文件中的正则表达式搜索中删除空格

时间:2011-04-29 15:42:45

标签: python regex

我正在尝试使用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'

2 个答案:

答案 0 :(得分:2)

似乎regex.searchline上因空格被剥离而失败,但是当空格存在时成功。你没有给出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()什么都没有。

相关问题