我得到的旅行确认如下:
“SQ 966 E 27JUL SINCGK”
= "Airline Space Flight Space BookingClass Space Date_with_Month_as_name Space 3LetterFrom 2LetterTo"
。
我可以使用正则表达式将所有这些切成碎片,然后将其提交到网站。但该网站预计将于2009年7月27日或27日至少27/07。有没有办法根据输入中的一个部分转换正则表达式结果。 Jan - > 01,2月 - > 02 ... Dec - > 12。
(正则表达式是Java)
答案 0 :(得分:5)
DateFormat是一个更合适的课程:
DateFormat output = new SimpleDateFormat("dd/MM", Locale.US);
DateFormat input = new SimpleDateFormat("dd MMM", Locale.US);
System.out.println(output.format(input.parse("24 Dec")));
输出:
24/12
答案 1 :(得分:1)
在Perl语法(s{pattern}{replacement}
)中:
s{([0-9][0-9])JAN}{\1/01}
s{([0-9][0-9])FEB}{\1/02}
s{([0-9][0-9])MAR}{\1/03}
s{([0-9][0-9])APR}{\1/04}
s{([0-9][0-9])MAY}{\1/05}
s{([0-9][0-9])JUN}{\1/06}
s{([0-9][0-9])JUL}{\1/07}
s{([0-9][0-9])AUG}{\1/08}
s{([0-9][0-9])SEP}{\1/09}
s{([0-9][0-9])OCT}{\1/10}
s{([0-9][0-9])NOV}{\1/11}
s{([0-9][0-9])DEC}{\1/12}
(是的,这很长很难看,但它可能会奏效)。
答案 2 :(得分:0)
它不是正则表达式解决方案,但您可以使用SimpleDateFormat
来帮助您进行最终格式化。您应该在JavaDoc中注意,这不是开箱即用的线程安全选项。
或者,您可以使用DateFormatSymbols.getShortMonths()
并迭代几个月来识别索引*并手动设置字符串格式。
*别忘了添加1;)
修改强>
我不确定您在Java regex中寻找什么是可能的,而不需要进行代码更改。 Java不支持Perl支持的条件结构,因为Java提供if-then-else支持作为语言功能。
答案 3 :(得分:0)
我会非常小心地使用正则表达式,因为他们没有告诉你转换是如何进行的。
手动提取每一点信息。完整性检查所有内容,然后使用SimpleDateFormat解析器从中获取可以使用的Date对象。