如何完整打印Google Translate API返回的长翻译文本?
解决Google Translate API长翻译文本截断问题
问题原因
你靠正则提取translatedText字段,长文本里的换行、转义引号(比如\")会打破正则的匹配规则,导致只抓到部分内容;另外如果请求时没正确传参,也可能让API返回不完整,但大概率是正则的锅。
修复方案
1. 别用正则了,直接解析JSON
Google Translate API返回的是标准JSON,用Python自带的json模块解析才靠谱,完全避免正则匹配的各种坑。
改完的代码示例:
import requests import json # 你的待翻译内容字典 texts_to_translate = { "id1": "简短测试文本", "id4": "这是一段非常长的测试文本,包含多个段落、换行符\n还有各种特殊字符,比如\"引号\"、斜杠\\之类的,用来验证长翻译是否能完整输出..." } # 替换成你的API密钥和目标语言 API_KEY = "your_api_key_here" TARGET_LANG = "zh-CN" API_URL = "https://translation.googleapis.com/language/translate/v2" for item_id, raw_text in texts_to_translate.items(): # 构造请求参数 request_params = { "q": raw_text, "target": TARGET_LANG, "key": API_KEY } # 发请求拿响应 resp = requests.get(API_URL, params=request_params) # 解析JSON translate_result = json.loads(resp.text) # 抽完整翻译文本 full_translation = translate_result["data"]["translations"][0]["translatedText"] # 打印完整内容 print(f"[{item_id}] 翻译结果:\n{full_translation}\n")
2. 非要用正则?调整匹配规则(不推荐)
如果实在得用正则,得改正则表达式,让它能匹配换行和转义引号:
import re # 带DOTALL标志的正则,匹配所有字符包括换行,同时处理转义引号 match_pattern = r'"translatedText":\s*"((?:\\"|[^"])*)"' match_obj = re.search(match_pattern, resp.text, re.DOTALL) if match_obj: # 把转义引号还原成正常引号 full_text = match_obj.group(1).replace('\\"', '"') print(full_text)
re.DOTALL让.能匹配换行,(?:\\"|[^"])*专门处理转义引号和普通字符,确保抓全整个翻译字段。
3. 检查长文本是否完整发送
如果是请求时文本被截断,试试用POST请求传参(GET对超长参数有长度限制):
request_data = { "q": raw_text, "target": TARGET_LANG, "key": API_KEY } resp = requests.post(API_URL, data=request_data)
重点提示
优先用JSON解析,正则只适合临时调试,面对复杂的JSON结构很容易翻车,这也是你长文本被截断的主要原因。
内容的提问来源于stack exchange,提问作者Ice-9
相关产品推荐
相关产品推荐

