runnable-hub/python/example/llm/cli-history.py (23 lines of code) (raw):

#!/usr/bin/env python3 import asyncio import os import sys import yaml import json current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, os.path.dirname(os.path.dirname(current_dir))) from runnable_workers.llmWorker.worker import Worker as LlmWorker from runnable_workers.llmWorker.request.llmRequest import LlmRequest from runnable_hub import RunnableHub from runnable_hub.store import RunnableLocalFileStore QWEN_SK = os.getenv("QWEN_SK") requestYaml = f""" setting: endpoint: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions model: qwen-plus secretKey: {QWEN_SK} """ requestYaml += """ systemPrompt: You are a helpful assistant. userPrompt: 能否再精简一些? history: - role: user content: 请帮我使用python的正则匹配json - role: assistant content: | 在 Python 中使用正则表达式(regex)来匹配 JSON 数据并不是一个常见的做法,因为 JSON 是一种结构化的数据格式,通常更适合使用专门的解析库(如 `json` 模块)来处理。然而,如果你确实需要使用正则表达式来匹配 JSON 的某些部分(例如提取特定的键值对),你可以结合 `re` 模块和 `json` 模块来实现。 以下是一些示例,展示了如何使用正则表达式匹配 JSON 数据的不同部分: ### 示例 1:从 JSON 字符串中提取特定键的值 假设你有一个 JSON 字符串,并且你想提取其中某个键的值。可以使用正则表达式来匹配该键及其对应的值。 ```python import re import json # 示例 JSON 字符串 json_str = '{"name": "Alice", "age": 30, "city": "New York"}' # 使用正则表达式匹配 "name" 键的值 pattern = r'"name"\s*:\s*"([^"]*)"' match = re.search(pattern, json_str) if match: print("Name:", match.group(1)) else: print("Key 'name' not found") ``` ### 示例 2:从 JSON 数组中提取所有键值对 如果你有一个包含多个对象的 JSON 数组,并且想提取每个对象中的某个键的值,可以使用正则表达式来匹配这些键值对。 ```python import re import json # 示例 JSON 数组字符串 json_str = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]' # 使用正则表达式匹配所有的 "name" 键的值 pattern = r'"name"\s*:\s*"([^"]*)"' matches = re.findall(pattern, json_str) if matches: print("Names found:", matches) else: print("No names found") ``` ### 示例 3:结合 `json` 模块进行更复杂的操作 如果你需要更复杂的操作,建议先将 JSON 字符串解析为 Python 对象,然后再进行处理。这样可以避免正则表达式的复杂性和潜在的错误。 ```python import json # 示例 JSON 字符串 json_str = '{"name": "Alice", "age": 30, "city": "New York"}' # 解析 JSON 字符串为 Python 字典 data = json.loads(json_str) # 提取 "name" 键的值 name = data.get('name') print("Name:", name) ``` ### 示例 4:匹配 JSON 中的嵌套结构 如果你有嵌套的 JSON 结构,并且想提取其中的某个键的值,可以使用递归或正则表达式结合解析库。 ```python import re import json # 示例嵌套 JSON 字符串 json_str = '{"user": {"name": "Alice", "details": {"age": 30, "city": "New York"}}}' # 使用正则表达式匹配嵌套结构中的 "age" 键的值 pattern = r'"age"\s*:\s*(\d+)' match = re.search(pattern, json_str) if match: print("Age:", match.group(1)) else: print("Key 'age' not found") # 或者使用 json 模块解析并提取 data = json.loads(json_str) age = data['user']['details'].get('age') print("Age:", age) ``` ### 总结 虽然正则表达式可以用于匹配 JSON 数据中的某些部分,但在大多数情况下,使用 Python 的 `json` 模块来解析 JSON 数据会更加安全、可靠和高效。正则表达式适用于简单的模式匹配任务,但对于复杂的 JSON 结构,建议使用专业的解析库。 """ async def main(): runnableHub = RunnableHub(store=RunnableLocalFileStore("/tmp/")) runnableHub.registerWorker(LlmWorker()) print(runnableHub.workers) runnableContext = await runnableHub.executeStart(LlmRequest.model_validate_json(json.dumps(yaml.safe_load(requestYaml)))) runnableContext = await runnableHub.executeWait(runnableContext) print(json.dumps(json.loads(runnableContext.model_dump_json()), indent=4)) if __name__ == "__main__": asyncio.run(main())