正则表达式匹配返回None求助:无法提取路径中的ID串
问题根源与解决方法
你的函数返回None的核心原因是**re.match()仅从字符串的起始位置开始匹配**,而目标ID并不在路径字符串的开头,自然匹配失败。
修正步骤:
- 替换匹配方法:将
pattern.match(path)改为pattern.search(path)。search()会扫描整个字符串,找到第一个符合正则的匹配项,而非局限于字符串开头。 - 提取实际匹配内容:
search()返回的是匹配对象,需要调用.group()方法获取具体的ID字符串,否则返回的是匹配对象而非目标值。 - 优化正则(可选):为避免匹配到路径中其他无关的数字下划线组合,可调整正则,限定ID位于
/之后、?之前,匹配更精准:pattern = re.compile(r"/([0-9]+(_[0-9]+)+)\?")
修正后的完整函数:
import re def extract_id(path): # 精准匹配/和?之间的ID格式 pattern = re.compile(r"/([0-9]+(_[0-9]+)+)\?") match_result = pattern.search(path) # 匹配成功则返回ID,否则返回None return match_result.group(1) if match_result else None
测试验证:
针对你给出的两个路径输入,该函数会分别返回5438_133195_9917949_1218833和2356_15890_9397775,完全符合预期。
内容的提问来源于stack exchange,提问作者Ktrel
相关产品推荐
相关产品推荐

