日期时间格式的动态正则表达式

hak*_*kan 5 regex datetime information-retrieval

是否有现有的解决方案可以根据给定的日期时间格式模式动态创建正则表达式?支持的日期-时间格式模式不要紧(乔达DateTimeFormatjava.text.SimpleDateTimeFormat或其他)。

作为一个具体的例子,对于给定的日期时间格式,如dd/MM/yyyy hh:mm,它应该生成相应的正则表达式以匹配指定格式中的日期时间。

Tom*_*lak 3

我猜你的时间格式可以用有限的字母表来构建。这意味着,"HH"始终是 24 小时制的“小时”,"dd"始终是带有前导零的日期,依此类推。

由于时间格式的顺序性质,您可以尝试将格式字符串 标记"dd/mm/yyyy HH:nn"为数组["dd", "/", "mm", "/", "yyyy", " ", "HH", ":", "nn"]。然后继续通过替换"HH""([01][0-9]|2[0-3])"等从该数组形成一个模式字符串。将这些模式原子预先构建到查找表/数组中。数组中不在查找表中的所有部分都是文字。根据正则表达式规则将它们转义并将它们附加到您的模式字符串中。


编辑:作为基于正则表达式的解决方案的副作用,当您将查找表的所有正则表达式“原子”放入括号并跟踪给定格式字符串中的顺序时,您将能够使用子匹配来提取从匹配中获取所需的组件并将其输入 CreateDate 函数中,从而完全跳过 ParseDate 部分。