Python中re.match正则匹配失效求助:所有请求均被跳过
问题分析与解决
你的所有请求被判定为不符合的核心原因是正则表达式的限制过于严格,re_year的读取是正常的(从你打印的结果来看,正则已正确编译为^StackOverFlow-2023-\d+$)。
具体问题点:
- 正则中的
\d+$要求字符串必须以一串连续数字结尾,但你的示例数据StackOverFlow-2023-0704-2225--在数字后还有--符号,完全不满足该规则; - 同时,该正则只允许财年
2023后紧跟一段数字,不允许后续出现-或其他字符,但你的实际数据中财年后还有多段内容(比如0704-2225--)。
针对性修改方案
根据你的需求(确保文件夹名属于当前财年,即包含StackOverFlow-2023-前缀),可以选择以下任意一种正则调整方式:
仅校验前缀开头:只要文件夹名以
StackOverFlow-2023-开头,不管后续内容是什么re_year = re.compile(f'^StackOverFlow-{Fiscal_Year}-')校验前缀+允许任意后续内容:确保前缀正确,同时允许后续出现任意字符(包括数字、字母、符号等)
re_year = re.compile(f'^StackOverFlow-{Fiscal_Year}-.*$')更精确的后续内容校验:如果财年后的内容只允许数字、字母和
-,可以用这个正则re_year = re.compile(f'^StackOverFlow-{Fiscal_Year}-[\w-]*$')
修改后的完整代码示例
import re # 假设df已提前定义并加载数据 Fiscal_Year = 2023 # 这里选用第二种方案,允许后续任意内容 re_year = re.compile(f'^StackOverFlow-{Fiscal_Year}-.*$') for idx, row in df.iterrows(): # 确保属于当前财年 if not re.match(re_year, row.Folder_Name_to_create): print(re_year) print(row.Folder_Name_to_create) print('Skipping request out-of-year:', row.Folder_Name_to_create) df.loc[idx, 'status'] = 'out-of-year' continue
补充说明:re.match默认从字符串开头匹配,所以正则中的^符号可以省略,不影响匹配结果。
内容的提问来源于stack exchange,提问作者Jonnyboi
相关产品推荐
相关产品推荐

