跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

CodeGeeX快速提取链接中的协议与参数【URL解析】

需绕过CodeGeeX默认输出限制,通过urllib.parse解析、正则捕获、提示词引导JSON输出或Shell管道四种方式,精准提取URL协议及查询参数。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您需要从CodeGeeX生成或处理的URL字符串中精确提取协议(如http、https、file)及查询参数(如?name=value&sort=asc),则需绕过其默认输出格式限制,直接对返回的URL文本进行结构化解析。以下是实现该目标的多种技术路径: 一、使用Python内置urllib.parse模块解析 该方法利用标准库中的
urlparse
与
parse_qs
函数,可无依赖地完成协议分离与参数键值对解构,适用于CodeGeeX输出纯文本URL后的后处理阶段。 1、将CodeGeeX返回的URL字符串赋值给变量
url_str
,例如
"https://api.example.com/v1/data?id=123&format=json"
。 2、导入模块:
from urllib.parse import urlparse, parse_qs
。 3、调用
parsed = urlparse(url_str)
,获取
scheme
(协议)、
netloc
(域名)、
path
(路径)等属性。 4、调用
params_dict = parse_qs(parsed.query)
,得到形如
{'id': ['123'], 'format': ['json']}
的标准字典。 5、提取协议: parsed.scheme ;提取全部参数键名: list(params_dict.keys()) ;提取某参数首值: params_dict.get('id', [''])[0] 。 二、借助正则表达式精准捕获协议与关键参数 当URL格式不规范(如缺失
://
、含嵌套问号或锚点)或需跳过标准库解析限制时,正则表达式提供更灵活的模式匹配能力,尤其适配CodeGeeX可能生成的非标准链接片段。 1、定义正则模式:
pattern = r'^([a-zA-Z][a-zA-Z0-9+.-]*):\/\/([^?#]+)(?:\?([^#]*))?(?:#(.*))?$'
。 2、使用
re.match(pattern, url_str)
执行匹配。 3、若匹配成功,通过
match.group(1)
获取协议部分。 4、通过
match.group(3)
提取完整查询字符串,再以
&
分割并逐项用
=
拆解为键值对。 5、关键提取结果应高亮标注: 协议字段位于捕获组1,原始查询参数串位于捕获组3 。 三、在CodeGeeX提示词中嵌入结构化输出指令 通过设计明确的系统提示(system prompt)与few-shot示例,引导CodeGeeX直接输出JSON格式解析结果,避免客户端二次解析,提升端到端效率。 1、设置系统消息为:
"你是一个URL解析器,仅输出合法JSON,包含字段:scheme(字符串)、host(字符串)、path(字符串)、params(对象,键为参数名,值为字符串数组)"
。 2、提供示例输入输出对:
{"input": "https://x.com/search?q=ai&src=typed_query", "output": {"scheme": "https", "host": "x.com", "path": "/search", "params": {"q": ["ai"], "src": ["typed_query"]}}}
。 3、向CodeGeeX提交待解析URL作为用户消息。 4、接收响应后,直接调用
json.loads()
解析,无需额外正则或URL库。 5、确保输出始终为严格JSON: 禁止任何解释性文字、Markdown标记或额外空格 。 四、利用CodeGeeX2命令行工具配合Shell管道解析 若在终端环境中批量处理CodeGeeX2生成的URL列表(如从
example_inputs.jsonl
导出),可通过Linux/Unix管道链式调用标准工具完成协议与参数提取,无需编写Python脚本。 1、运行CodeGeeX2生成URL列表并输出至stdout,例如:
python demo/run_demo.py --model-path THUDM/codegeex2-6b shell 。
2、使用
grep -oE 'https?://[^[:space:]]+'
提取所有HTTP/HTTPS URL。 3、使用
awk -F'[?:&]' '{print $1}'
截取协议部分(如
https
)。 4、使用
sed 's/.*?//; s/&.*$//'
提取首个参数名(如
q
)。 5、组合管道命令时,关键分隔符必须显式声明: 协议识别依赖于开头的https?://,参数提取依赖于首个?与后续&的相对位置 。

相关文章