我希望从 01OCT12 14:26 格式的文件或字符串中读取日期
我知道日期将是 OCT 月或 NOV 月,这可能有助于我编写更精确的正则表达式。
我已经阅读了 Java 提供的许多使用正则表达式的选项,例如 Matcher & Pattern 以及 Scanner 类,并希望能帮助我找到解决这个问题的最干净的方法。
如果您知道日期在字符串中的哪个位置,则可以使用SimpleDateFormatfor 解析而不是使用正则表达式:
DateFormat dateFormat = new SimpleDateFormat("yyMMMdd kk:mm", Locale.ENGLISH);
Date result = df.parse(stringDate);
(我假设那01是年和12日,但如果它颠倒了,那么你需要颠倒日期格式字符串中的yyand 。)dd
以下是使用正则表达式的方法,并举个例子:
String example = "01OCT12 14:26";
String pattern = "^(\\d{2})(?:OCT|NOV)(\\d{2}) (\\d{1,2}):(\\d{2})$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(example);
if (m.find())
{
//prints example
System.out.println(m.group());
System.out.println(m.group(1)); //prints 01
System.out.println(m.group(2)); //prints 12
System.out.println(m.group(3)); //prints 14
System.out.println(m.group(4)); //prints 26
}
"^(\\d{2})(?:OCT|NOV)(\\d{2}) (\\d{1,2}):(\\d{2})$"分解:
^手段以(...)是一个捕获组,这意味着这...是您要捕获的模式
\\d{2},这意味着任何数字中的两个[0-9](?:OCT|NOV)
?:表示不捕获以下内容OCT|NOV表示必须是 OCT 或 NOV(\\d{1,2})是匹配 1 个或 2 个数字的捕获组[0-9]$手段以您可能不想使用正则表达式来完成此任务;尽管如此,我相信这就是你想要的。