2011-04-27 129 views
0

我正在使用以下正則表達式同時搜索3種不同的字符串格式。此外,我使用re.IGNORECASE來匹配大小寫字符串。但是,當我執行搜索時(例如'locality'),我可以獲得'localit','locali','local'等等的字符串匹配。我想匹配確切的單詞(例如'locality')。正則表達式不區分大小寫的搜索

此外,如果字符串字符之間有空白(例如,'l ocal i ty'),我想忽略它。我還沒有找到允許我這樣做的re方法。我嘗試使用re.ASCII,但是出現錯誤:「... ascii無效!」任何援助表示讚賞。

elif searchType =='2': 
    print " Directory to be searched: c:\Python27 " 
    directory = os.path.join("c:\\","Python27") 
    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))re.IGNORECASE) 
    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 line in f.readlines(): 
       #if userstring in line: 
       if regex.search(line):  
        print "file: " + os.path.join(root,file)   
        break 
      else: 
       #print "String NOT Found!" 
       break 
      f.close() 
+4

請向我們展示一些具體的三個用戶字符串以及您正在搜索的字符串的示例。另請說出您獲得的內容以及您想要的內容喜歡得到。 – NPE 2011-04-27 21:10:14

+1

如果你想忽略字符之間的空格,那麼你可能需要在你要搜索的原始字符串中的每個字符之間插入一個'\ s *'。 – 2011-04-27 21:24:41

+0

請修正您的源代碼格式 - 每行前四個空格並適當縮進。 – jsw 2011-04-27 23:48:02

回答

2

中有重沒有這樣的標誌,所以無論是:

r'\s*'.join(c for c in userStrASCII)

這工作:

  • 每一個字符後建設有明確的空白匹配一個正則表達式myre.findall(line) 'Oc Oc ALi ty'

  • 或者(如果您只需要檢測與該模式相匹配的內容,但不會對實際匹配文本做進一步處理),請在匹配前使用string.translate(,deleteChars)刪除行中的空格。例如在嘗試匹配之前先做line.translate(None, ' \t\n\r').lower()。 (保留unsquelched行的副本。)