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)
错误在哪里?
答案 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