Regexp在www.example.com中工作regex101.com,但在python中不工作

ecr0jaav  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(133)

我试图使一个函数,得到一个数组的文件夹名称和一个数字(哪个季节文件夹的函数应该返回),我想检查是否有一个文件夹与正确的季节号[斯塔费尔=季节在德国],但我不只是拥有简单英语电视节目,所以我的文件夹命名为Staffel ==德国电视节目,和季节,如果它的英语。
在本例中,文件夹将包含不同的文件夹(d)我正在查找(季节|它应该返回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
kmpatx3s

kmpatx3s1#

您需要将最后一个\D替换为(?!\d)
在测试中,您使用了多行字符串输入,而在代码中,您测试了2之后末尾没有数字的单个字符串。\D是一个消耗模式,必须有一个非数字字符,而(?!\d)是一个负前瞻,一个非消耗模式,只要求下一个字符不能是数字。
另一个解决方案是用单词边界\b替换最后一个\D,但必须使用原始字符串文字量以避免转义问题(即使用r'pattern')。

jogvjijk

jogvjijk2#

Google把我带到这里,但对我来说问题是我正在使用compiled_regex = re.compile(myregex, re.IGNORECASE)编译表达式,然后再次尝试使用re.IGNORECASE标志进行搜索(compiled_regex.search(test_str, re.IGNORECASE)。
search参数中删除额外的re.IGNORECASE使它工作。

compiled_regex = re.compile(myregex, re.IGNORECASE)
compiled_regex.search(test_str)

以防像我这种情况的人又从谷歌登陆这里。

相关问题