Skip to main content
 首页 » 编程设计

python之正则表达式在 regex101.com 上运行但在 python 中不起作用

2024年10月01日7haluo1

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

在此示例中,文件夹将包含不同的文件夹 (d) 我在寻找 (Season|Staffel) 2 它应该返回 Season 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 

请您参考如下方法:

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

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

另一种解决方案是将最后一个 \D 替换为单词边界 \b,但您必须使用原始字符串文字以避免转义问题(即使用r'模式').