Python re.findall如何提取已知前缀后长度未知的完整字符串?
问题根因
原正则使用\w作为匹配规则,该元字符仅能匹配字母、数字、下划线三类字符,遇到目标模型名中的半角横杠-就会终止匹配,因此只能拿到横杠前的paraphrase片段。
修正后的正则写法
根据使用场景可选两种方案:
- 固定字符集匹配(性能更高,适配已知模型名规则的场景)
直接将半角横杠加入匹配字符集即可,代码如下:
该规则可以完整匹配由字母、数字、下划线、横杠组成的模型名,覆盖目前所有公开的sentence-transformers预训练模型命名格式。import re models = re.findall(r"sentence-transformers/([\w-]+)", text) - 边界匹配(适配性更强,适合HTML文本中混杂各类标签、特殊符号的场景)
无需提前枚举模型名可能包含的字符,直接匹配到字符串自然边界即可,代码如下:
该规则会匹配前缀之后所有不属于空白字符、HTML标签尖括号、引号的连续内容,即使后续模型名出现import re models = re.findall(r"sentence-transformers/([^\s<>"'`]+)", text).、二级路径这类特殊字符也能正常提取,不会出现截断问题。
测试验证
针对包含sentence-transformers/paraphrase-MiniLM-L6-v2的测试文本,上述两种写法均能正确提取完整的paraphrase-MiniLM-L6-v2字符串,不会出现仅返回首个片段的问题。
内容的提问来源于stack exchange,提问作者Ele
相关产品推荐
相关产品推荐

