基于urllib开发西英翻译器:通配符匹配问题求助
解决西班牙语-英语翻译器的通配符匹配问题
嘿,我懂你现在的烦恼——用固定字符串硬搜HTML内容太容易翻车了,毕竟不同单词的翻译结果页面结构多少会有差异。咱们把代码改得灵活点,用正则的“模糊匹配”能力来适配各种翻译结果,这就是你要的“通配符”效果嘛!
问题拆解
你当前的代码用re.search精准匹配<span class="context">和</span>&nbsp;,这种方式太脆弱:只要页面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'<span\s+class="context">(.*?)</span>', 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
相关产品推荐
相关产品推荐

