Python中re.match中的问题


            if re.match(f'{model_dir}/shard-\d+/{suffix}', filename):   
                shard = int(root.split('/')[-1].split('-')[-1])
                print(shard)
                model = model_init()
                model.load_weights(filename)
                models[shard] = {
                    'model': model,
                    'shard': shard
                }

上述代码中,re.match()运行完报错:re.error: bad escape \C at position 2,不知道该如何解决

把f'{model_dir}/shard-\d+/{suffix}'赋值给一个变量打印出来看看是什么? 是否要转义 \

  • 这篇博客: Python中的re模块中的 match对象 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • re.match与re.search函数可以返回match对象,re.finditer可迭代对象返回的也是match对象。如果pattern(正则表达式)中使用了分组,如果有匹配结果,会在match对象中。
    1. 使用group(N)方式可以获取对应分组,1到N是对应的分组,0返回整个匹配的字符串,也就是默认分组Match,N默认的缺省值为0。
    2. 如果使用了命名分组,可以使用group(“name”)的方式获取分组
    3. 也可以使用groups()返回所有组
    4. 使用groupdict()返回所有命名的分组,和组名的对应关系组成的字典

  • 以下回答由chatgpt基于相关博客总结生成:

    根据错误提示信息,问题出现在正则表达式中的转义字符 \C,这是一个无效的转义字符。需要将其改为相应的字符或删除该转义字符。

    例如,如果原本意思是匹配大写字母 C,可以将正则表达式中的 \C 改为 C;如果该转义字符并非必要,可以直接将其删除。

    代码示例:

    import re

    错误示例

    pattern = r'\Cfoo'

    TypeError: bad escape \C at position 0

    改正后的正则表达式

    pattern = r'Cfoo'

    或者将转义字符删除

    pattern = r'foo'

    使用 match() 函数匹配字符串

    string = 'Cfoobar' match = re.match(pattern, string)

    输出匹配结果和相关信息

    if match: print(match.group(0)) print(match.start()) print(match.end()) else: print('No match')