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函数的问题在于,不管有多少个"dias"
,它总是将"dias"
作为复数。
如何将条件放入lambda函数中,以根据数量确定它是复数形式的"dias"
还是单数形式的"dia"
if (str(m[1]) != "1"): str(int(m[1]) * nro_days_in_a_week) + " dias "
elif (str(m[1]) == "1"): str(int(m[1]) * nro_days_in_a_week) + " dia "
从示例中获取该字符串,我们应该得到以下输出:
"en 7 dias quizas este lista, aunque viendole mejor, creo esta muy oxidada y seguro la podre poner en marcha en 21 dias"
在这种情况下,因为它们是周,所以它们将始终保持复数形式,但假设周持续1天作为参数,那么问题就存在了。
1条答案
按热度按时间kt06eoxx1#
您可以使用
正则表达式现在是
(\d+(?:\.\d+)?)\s*semanas?\b
:(\d+(?:\.\d+)?)
-第1组:一个或多个数字,后跟.
和一个或多个数字的可选序列\s*
-零个或多个空格semanas?
-semana
和一个可选的s
字符\b
-字边界。lambda m: str(int(float(m[1]) * nro_days_in_a_week)) + (" dia" if round(float(m[1]) * nro_days_in_a_week) == 1 else " dias")
替换现在连接:str(int(float(m[1]) * nro_days_in_a_week))
-第1组乘以nro_days_in_a_week
的天数nro_days_in_a_week
相乘的结果四舍五入为1,则(" dia" if round(float(m[1]) * nro_days_in_a_week) == 1 else " dias")
将dia
相加,否则使用dias
。