Regexp正在运行regex101.com但不在python中

时间:2017-02-07 18:07:24

标签: python regex

我正在尝试创建一个函数,它获取一个文件夹名称数组和一个数字(该函数应返回的季节文件夹),我想检查是否有一个具有正确季节编号的文件夹[Staffel = Season in德语]但我不只是拥有简单的英语电视节目,所以我的文件夹是名为Staffel ==德国电视节目,如果它的英文电子节目。

在此示例中,文件夹将包含不同的文件夹(d) 我正在寻找(季节| Staffel)2它应该返回第02季,因为它发生在阵列中的Staffel 2之前

def findFolderbyNumber(path, number):
    d = getFolders(path)
    d = ['Staffel 1','Staffel 20','Season 02', 'Staffel 2', 'Season 3']
    number = 2
    for obj in d:
        pattern = '(.*)(Staffel|Season)((\s?)*)((0?)*)('+str(number)+')(\D)(.*)'
        m = re.match(pattern, obj)
        print(obj, end='\tMatch = ')
        print(m)
        if(m):
            return obj
    return 0


Staffel 1   Match = None
Staffel 20  Match = None
Season 02   Match = None
Staffel 2   Match = None
Season 3    Match = None

1 个答案:

答案 0 :(得分:2)

您需要将最后\D替换为(?!\d)

在测试中,您使用了多行字符串输入,在代码中,您在2之后测试末尾没有数字的单个字符串。 \D是一种消费模式,必须有一个非数字字符,(?!\d)是一个负前瞻,一种非消费模式,只要求下一个字符不能是数字。

另一个解决方案是使用单词边界\D替换最后一个\b,但您必须使用原始字符串文字来避免转义问题(即使用r'pattern')。< / p>