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

如何在Lambda函数中加入条件判断实现字符串单复数拼接?

解决Python正则替换中天数单复数的问题

问题说明

现有一段Python代码,通过re.sub结合Lambda函数将文本中的X semana/semanas转换为X×每周天数 dias,但当前Lambda函数无论计算后的天数是多少,都只会拼接复数形式的dias,无法根据数值自动切换单数dia或复数dias。

原代码(注意:原代码缺失re模块导入,需补充):

import re

def weeks_to_days(input_text, nro_days_in_a_week = 7):
    input_text = re.sub(
                r"(\d+)[\s|]*(?:semanas|semana)",
                lambda m: str(int(m[1]) * nro_days_in_a_week) + " dias ",
                input_text)

    return input_text


input_text = "en 1 semana quizas este lista, aunque viendole mejor, creo esta muy oxidada y seguro la podre poner en marcha en 3 semanas"

print(weeks_to_days(input_text))

修正方案

需要在Lambda函数内部加入条件判断,基于计算后的总天数来决定使用单数还是复数形式(注:原需求中给出的判断原周数的逻辑存在漏洞,比如当每周天数为2时,1周对应2天,此时应该用复数dias,而非单数dia,因此正确逻辑应基于总天数判断)。

修正后的代码:

import re

def weeks_to_days(input_text, nro_days_in_a_week = 7):
    input_text = re.sub(
                r"(\d+)\s*(?:semanas|semana)",  # 简化正则,仅匹配空格(若需保留竖线可改回[\s|]*)
                lambda m: 
                    f"{total_days} dia " if (total_days := int(m[1]) * nro_days_in_a_week) == 1 
                    else f"{total_days} dias ",
                input_text)

    return input_text


input_text = "en 1 semana quizas este lista, aunque viendole mejor, creo esta muy oxidada y seguro la podre poner en marcha en 3 semanas"

# 测试默认每周7天的情况
print(weeks_to_days(input_text))
# 输出: en 7 dias quizas este lista, aunque viendole mejor, creo esta muy oxidada y seguro la podre poner en marcha en 21 dias 

# 测试每周1天的情况
print(weeks_to_days(input_text, nro_days_in_a_week=1))
# 输出: en 1 dia quizas este lista, aunque viendole mejor, creo esta muy oxidada y seguro la podre poner en marcha en 3 dias 

关键细节

  • 利用Python 3.8+支持的海象运算符:=,在Lambda函数内一次性计算并存储总天数,简化条件判断
  • 核心逻辑:总天数为1时用单数dia,其余情况用复数dias
  • 优化正则表达式:将[\s|]简化为\s*(若需匹配空格或竖线可改回[\s|]*),避免字符集内不必要的转义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:25:16