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

如何修改Python中re.findall语法以完成Word a10n kata题目?

问题分析与解决

你的代码目前只完成50%要求,核心问题出在正则表达式的匹配逻辑上:

  1. 正则里多余包含了@#0-9,不符合题目中"单词由字母组成"的定义;
  2. 用\W+匹配非单词字符会把 apostrophe(')当成分隔符,拆分don't这类合法单词,导致错误缩写其中的纯字母部分。

修改后的正则与代码

调整正则来正确识别包含内部 apostrophe的单词,同时过滤掉无关字符,修改后的代码如下:

import re
def abbreviate(s):
    # 匹配合法单词(字母+内部 apostrophe)或非字母字符序列
    parts = re.findall(r"[A-Za-z]+(?:['’][A-Za-z]+)*|[^A-Za-z]+", s)
    result = []
    for part in parts:
        # 仅对纯字母且长度>3的单词进行缩写
        if part.isalpha() and len(part) > 3:
            result.append(f"{part[0]}{len(part)-2}{part[-1]}")
        else:
            result.append(part)
    return "".join(result)

正则说明

  • [A-Za-z]+:匹配一个或多个字母,作为单词的开头;
  • (?:['’][A-Za-z]+)*:非捕获组,匹配零次或多次「 apostrophe+字母」组合,兼容don't、doesn't这类带 apostrophe的单词;
  • [^A-Za-z]+:匹配所有非字母字符(连字符、空格、标点等),直接保留原格式。

效果验证

  • don't会被作为整体匹配,因包含非字母字符不缩写,结果为don't;
  • elephant-rides拆分为elephant、-、rides,纯字母部分分别缩写为e6t和r3s,最终结果e6t-r3s;
  • mother-in-law处理后为m3r-in-l2w,符合题目复合词的缩写规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:30:45