You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于urllib开发西英翻译器:通配符匹配问题求助

解决西班牙语-英语翻译器的通配符匹配问题

嘿,我懂你现在的烦恼——用固定字符串硬搜HTML内容太容易翻车了,毕竟不同单词的翻译结果页面结构多少会有差异。咱们把代码改得灵活点,用正则的“模糊匹配”能力来适配各种翻译结果,这就是你要的“通配符”效果嘛!

问题拆解

你当前的代码用re.search精准匹配<span class="context">和</span> ,这种方式太脆弱:只要页面HTML结构微调(比如标签里多了空格、属性顺序变了),搜索直接失效。所谓“通配符匹配”,本质就是用正则捕获两个标记之间的任意内容,不用死抠固定字符串。

改进后的代码方案

import urllib.request
import re

while True:
    word = input('Enter your word: ')
    if not word:  # 输入空值可退出循环
        break
    url = f'http://www.spanishdict.com/translate/{word}'
    
    try:
        u = urllib.request.urlopen(url).read()
        decoded = u.decode('utf-8')
        
        # 用正则匹配<span class="context">和</span>之间的内容,兼容标签内的空格变化
        # 非贪婪模式.*?确保只捕获当前span内的内容,不会过度匹配
        match = re.search(r'&lt;span\s+class="context"&gt;(.*?)&lt;/span&gt;', decoded, re.DOTALL)
        
        if match:
            final = match.group(1).strip()  # 去除内容首尾的空格换行
            print(f"翻译结果:{final}")
        else:
            print("没找到这个单词的翻译哦")
            
    except Exception as e:
        print(f"出问题啦:{str(e)}")

核心改进点

  • 灵活的正则匹配:用\s+匹配标签内的任意空格,避免HTML格式变化导致匹配失败;.*?作为“通配符”,精准捕获目标span里的所有内容。
  • 错误处理:加了try-except块,能处理网络连接失败、页面结构突变等意外情况,不会直接崩掉。
  • 结果校验:先判断正则是否匹配成功,再提取内容,避免原代码中search_1或search_2为None时抛出报错。

额外小贴士

虽然正则能解决当前问题,但解析HTML更靠谱的工具是BeautifulSoup——它能直接解析HTML结构,不用纠结正则的细节。如果后续页面结构经常变,建议换成这个库试试。

内容的提问来源于stack exchange,提问作者Tolly Boy101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:20:11