如何正确处理python正则表达式中的贪婪和可选模式

时间:2013-06-11 18:53:43

标签: python regex non-greedy

我有一个包含路径的变量,我想从路径中提取第6个文件夹,但7个文件夹可能会也可能不会发生。在这两种情况下......正则表达式应返回"三",但第一个示例无法匹配。我试过用?表示可选,但我的尝试不正确。

在两种情况下,我需要在正则表达式中进行哪些更改才能使其匹配:

path = "//network/path/folder/_one/two/three"  # fails 
path = "//network/path/folder/_one/two/three/four"  # works

p = re.compile('^//network/path/folder/_.*?/.*?/(.*?)/')   # compile the regex
m = re.search(p, path)    # regex search

if m:     # regex matched
    print "6th folder =",m.group(1)

1 个答案:

答案 0 :(得分:2)

也许您可以定位较小的字符而不是.*

^//network/path/folder/_.*?/[^/]*/([^/]*)

http://regexr.com?356lh

[^/]*表示任何字符的出现次数,但不是前进的SLASH。 ^不是旗帜。