提取并重新排列子字符串

问题描述 投票:0回答:1

我有一个包含 DD.MM.YYYY 形式的日期的字符串,并希望将其转换为 YYYYMMDD 格式。不需要进行错误检查,因为我可以确保输入字符串具有正确的格式。如何以紧凑的方式完成此操作?注意:我对纯粹基于字符串处理的解决方案感兴趣,而不是创建和格式化

Date
对象。

我想出了简单的解决方案

s ="14.04.2023"
sx = String.slice(s, 6, 4) <> String.slice(s, 3, 2) <> String.slice(s, 0, 2)

这可行,但需要输入大量内容。有没有更“类似长生不老药”的方法?例如,在 Ruby 中我可能会做一个

sx = s.match(/(..).(..).(....)/).captures.reverse.join

这在我看来会更清楚,因为正则表达式显示了提取字符串的哪些部分,而

reverse.join
告诉我们如何将这些部分再次组合在一起。我想知道在 Elixir 中如何实现类似的方法,或者经验丰富的 Elixir 程序员将如何完成这项任务。

elixir
1个回答
0
投票

鉴于您的问题的前提(即您100%确定输入格式,您不需要验证日期,并且您对本机字符串处理感兴趣),请考虑以下解构:

iex> <<mm::binary-size(2), ".", dd::binary-size(2), ".",  yyyy::binary-size(4)>> = "04.12.2024"
"04.12.2024"

这将绑定变量,以便

mm = "04"
dd = "12"
yyyy = "2024"
。当您确切知道每个段有多少个字符时,在解析字符串时,
::binary-size(n)
是一个有用的修饰符。

© www.soinside.com 2019 - 2024. All rights reserved.