2014-11-23 34 views
0

Python不unexpectingly不匹配的字符串我想匹配:的Python - 有條件的正則表達式匹配

以下功能掃描子目錄的目錄,具有特定名稱格式。 如果匹配,則應打印出來。正則表達式是正確的,我檢查它:DEMO

但是,條件塊不會打印出任何內容,而print-command之前顯示的是我正在查找的目錄。所以它應該匹配,但不是;

def getRelevantFolders(): 
    pattern = re.compile('(e|d|b)-(heme|gome|jome)-(?!.*?\/)(.+)') 
    for root, dirs, files in os.walk('/jome'): 
     print root # f.e.: /jome/stat/d-heme-sdfsdf 
     if pattern.match(root): 
      print ('Matched: ' + root) 

錯誤在哪裏?

回答

1

使用search而不是match,因爲match始終與字符串的開頭匹配。

def getRelevantFolders(): 
    pattern = re.compile('[edb]-(heme|gome|jome)-([^/]+)') 
    for root, dirs, files in os.walk('/jome'): 
     print root # f.e.: /jome/stat/d-heme-sdfsdf 
     if pattern.search(root): 
      print 'Matched: ' + root 
2

您需要使用re.search代替re.match()因爲re.match匹配領先的格局:

pattern.search(root) 

在蟒蛇維基:

如果你想在字符串的任何地方找到一個匹配,使用search()取而代之(另請參閱search() vs. match())。

的Python提供了兩種不同的基本操作基於正則表達式:re.match()檢查只在字符串的開頭匹配,而re.search()檢查匹配字符串中的任何地方(這是Perl並默認情況下)。

+0

感謝您的澄清! – royskatt 2014-11-23 13:04:32

+0

@royskatt不客氣! – Kasramvd 2014-11-23 13:06:46