Python - 条件正则表达式匹配

时间:2014-11-23 12:41:37

标签: python regex

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)

错误在哪里?

2 个答案:

答案 0 :(得分:2)

您需要使用re.search代替re.match(),因为re.match与来自领导的模式匹配:

pattern.search(root)

在python wiki中:

如果您想在字符串中的任何位置找到匹配项,请改用search()(另请参阅search() vs. match())。

  

Python提供了两种基于正则表达式的不同原语操作:re.match()仅在字符串的开头检查匹配,而re.search()检查字符串中任何位置的匹配(这就是Perl默认情况下)。

答案 1 :(得分: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