代码之家  ›  专栏  ›  技术社区  ›  stwissel

使用正则表达式将日期从24Dec转换为24/12或24/12/2009

  •  1
  • stwissel  · 技术社区  · 16 年前

    "Airline Space Flight Space BookingClass Space Date_with_Month_as_name Space 3LetterFrom 2LetterTo" . 我可以使用正则表达式将所有这些内容分割成碎片提交到网站。但该网站预计不是2009年7月27日,而是至少2007年7月7日。是否有方法根据输入中的片段转换正则表达式结果。1月->2月1日-> 02 ...12月-> 12.

    (正则表达式风格是Java)

    4 回复  |  直到 16 年前
        1
  •  5
  •   dfa    16 年前

    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
    
        2
  •  1
  •   user9876    16 年前

    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}
    

    (是的,这很长很难看,但它可能会奏效)。

        3
  •  0
  •   Thorbjørn Ravn Andersen    16 年前

    使用正则表达式时,我会非常小心,因为它们不会告诉你转换是如何进行的。

    手动提取每一点信息。理智检查一切,以及 然后

        4
  •  0
  •   akf    16 年前

    它不是正则表达式解决方案,但您可以使用 SimpleDateFormat 以帮助您进行最终格式化。您应该在JavaDoc中注意到,这不是一个现成的线程安全选项。

    或者,您可以使用 DateFormatSymbols.getShortMonths() 并在几个月内迭代以识别索引*并手动格式化字符串。

    *别忘了加1;)

    如果没有进行代码更改的能力,我不确定您在Java正则表达式中寻找什么是可能的。Java不支持Perl支持的条件构造,因为Java提供if-then-else支持作为语言功能。